python - 从最后一行读取csv文件

1 投票
1 回答
5605 浏览
提问于 2025-04-17 15:18

我搜索了很久,但找不到从特定行号读取csv文件数据的方法。

这个csv文件是动态更新的。更具体地说,数据之间的分隔符是制表符,所以在时间点t1时:

1 2 3
5 6 7
8 9 10
11 12 13
14 15 16

在时间点t2时是

1 2 3
5 6 7
8 9 10
11 12 13
14 15 16
17 18 19

我有一个集合(双端队列),我想把csv文件中第一列的数据添加进去。

目前我写的代码可以做到这一点:在时间点0时:

[deque([0, 0, 0, 0, 0], maxlen=5)]

在时间点1时:

[deque(['1', '5', '8', '11', '14'])]

在时间点2时:

[deque(['5', '8', '11', '14','17'])]

我写的代码是以我想要的格式读取数据的。

Question:

但是当我在某个时刻'x'重新打开文件时,它应该从

[deque(['8', '11', '14','17','x'])]

而不是

[deque(['1', '5', '8', '11', '14'])]

我能否读取一行然后跳到下一个文件?有没有库可以让我做到这一点?

我说得清楚吗?还是我漏掉了什么信息?

更新这个问题的回答,参考了kurtis的输入(所有的功劳归他):

perf_his = []

for a in range(len(filename)):
 perf_his += [deque([0]*5,maxlen=5)]
for a in range(len(filename)):
 lines = open(filename[a]).readlines()[-NUM_LINES:]
 mydata = [line.split()[0] for line in lines]
 for i in range(0, len(mydata)):
  perf_his[a].append(mydata[i])
   print perf_his

1 个回答

2

你真的想要倒着读取文件吗?从你发的内容来看,你似乎只是想处理最后的5行。如果不是的话,在t2的时候,你应该得到deque(['17', '14', '11', '8', '5']),而不是deque(['5', '8', '11', '14','17'])。

假设你真正想做的就是处理最后的5行,你可以试试下面这样的做法 --

from collections import deque

NUM_LINES=5 #The number of lines to process.  Should equal the deque maxlen    

lines = open("myfile.csv").readlines()[-NUM_LINES:] #Assumes the file can fit into memory
mydata = [line.split()[0] for line in lines]
d = deque(mydata, maxlen=NUM_LINES)
print d

撰写回答