2013-02-08 298 views
1

我搜索了很多,但我找不到从特定行号的csv文件中读取数据的方法。python - 从最后一行读取csv文件

csv文件即时更新。为了更准确的分隔符是一个tab空间 因此,在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 

我有一个集合(双端队列),其中我想追加来自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'])] 

阅读和有可能是我读一行,并跳转到下一个文件?有没有图书馆可以让我这样做?

我清楚了吗?或者我错过了一些信息?

采取从裴家(所有学分他)输入更新这个问题的答案:

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 
+0

你可能会考虑调整http://code.google.com/p/ pytailer/ – 2013-02-08 23:15:31

+1

我觉得很难理解你为什么要重新打开文件,为什么不重新使用文件句柄。重新打开'x'似乎你想要一行'x'行'x'+ 5,至于第1行,你读了5行数据,但'x'的例子显示它最后一行。是否希望从出列中获取数据,但是当您从csvreader中检测到新数据时,您希望将其添加到出列中。您如何知道什么时候没有更多数据要添加到CSV文件中? – sotapme 2013-02-08 23:44:23

+0

我有多个文件,我必须不断阅读。为了做到这一点,我需要关闭一个文件处理程序,然后重新打开另一个文件处理程序。对? 退出程序并自动确保没有更多数据写入csv文件。 – pistal 2013-02-09 15:08:28

回答

2

你真的想向后读取文件?从你发布的内容看,你只是想处理最后5行 - 否则在t2时代代替deque(['5','8','11','14','17']),你会有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 
+0

对于延迟回复,我很抱歉。我想处理csv文件中第一个色彩的最后五行。让我试试你的代码。 – pistal 2013-02-09 15:03:25