1

我搜索了很多,但我找不到从特定行号的 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

我有一个集合(双端队列),我想在其中将来自 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
4

1 回答 1

2

你真的想向后读取文件吗?从您发布的内容来看,您似乎只想处理最后 5 行 - 否则您将在 t2 代替 deque(['5', '8', '11', '14','17'])有双端队列(['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
于 2013-02-09T01:58:56.740 回答