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

时间:2013-02-08 23:03:23

标签: 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

我有一个集合(deque),我想在其中附加coloumn0 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 个答案:

答案 0 :(得分:2)

你真的想要向后阅读文件吗?根据你发布的内容,看起来你只想处理最后5行 - 否则不是deque(['5','8','11','14','17'])在t2你会有deque(['17','14','11','8','5'])。

假设你真正想做的只是处理最后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