如果我有一堆csv
文件,它們會定期更新。 比方說,CSV文件是:連續解析由另一個進程更新的CSV文件
file1.csv, file2.csv file3.csv
在更新過程中,數據被追加到csv
文件的最後一行。
是否可以讀取csv
文件中的數據,並將其更新並存儲在array
或collection(deque)
中。
有沒有辦法在csv文件更新時收集數據?
如果我有一堆csv
文件,它們會定期更新。 比方說,CSV文件是:連續解析由另一個進程更新的CSV文件
file1.csv, file2.csv file3.csv
在更新過程中,數據被追加到csv
文件的最後一行。
是否可以讀取csv
文件中的數據,並將其更新並存儲在array
或collection(deque)
中。
有沒有辦法在csv文件更新時收集數據?
您可以使用名爲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()
如果python腳本在csv更新過程中未運行。我認爲將'last_pos'寫入硬盤文件以標記最後一行讀取會更好。 – 2013-02-11 03:02:14
什麼是更新文件? – kojiro 2013-02-09 02:01:06
linux內核工具 - 'perf' – rnish 2013-02-09 02:01:27
如果直接從'perf'讀取數據不是一種選擇,請嘗試像inotify這樣的系統 - https://github.com/seb-m/pyinotify來檢測文件系統更改。然後,只需使用Python csv模塊。 – kojiro 2013-02-09 02:04:57