2013-02-09 74 views
3

如果我有一堆csv文件,它們會定期更新。 比方說,CSV文件是:連續解析由另一個進程更新的CSV文件

file1.csv, file2.csv file3.csv 

在更新過程中,數據被追加到csv文件的最後一行。

是否可以讀取csv文件中的數據,並將其更新並存儲在arraycollection(deque)中。

有沒有辦法在csv文件更新時收集數據?

+0

什麼是更新文件? – kojiro 2013-02-09 02:01:06

+0

linux內核工具 - 'perf' – rnish 2013-02-09 02:01:27

+0

如果直接從'perf'讀取數據不是一種選擇,請嘗試像inotify這樣的系統 - https://github.com/seb-m/pyinotify來檢測文件系統更改。然後,只需使用Python csv模塊。 – kojiro 2013-02-09 02:04:57

回答

1

您可以使用名爲Watchdog的python程序包。

這個例子顯示遞歸地監視當前目錄中的文件系統的變化,並記錄任何控制檯:

import time 
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler 

if __name__ == "__main__": 
    event_handler = LoggingEventHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path='.', recursive=True) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 

你可以結合伊格納西奧的答案用這個 - 使用file_pointer.tell()獲得在當前位置文件,然後seek()下一次,並閱讀文件的其餘部分。例如:

# First time 
with open('current.csv', 'r') as f: 
    data = f.readlines() 
    last_pos = f.tell() 

# Second time 
with open('current.csv', 'r') as f: 
    f.seek(last_pos) 
    new_data = f.readlines() 
    last_pos = f.tell() 
+0

如果python腳本在csv更新過程中未運行。我認爲將'last_pos'寫入硬盤文件以標記最後一行讀取會更好。 – 2013-02-11 03:02:14

0

將文件的當前大小與文件中的當前偏移量進行比較。如果尺寸較大,請閱讀新數據。

+0

例子?或者更多的解釋嗎? – rnish 2013-02-09 02:03:53

+0

http://stackoverflow.com/q/2104080/20862 http://stackoverflow.com/q/3642088/20862 – 2013-02-09 02:05:23

+0

無法執行此操作:-( – rnish 2013-02-09 02:38:55