2013-02-08 300 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