python - 从最后一行读取csv文件
我搜索了很久,但找不到从特定行号读取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