连续解析由另一个进程更新的CSV文件

时间:2013-02-09 01:59:17

标签: python csv

如果我有一堆csv个文件,它们会定期更新。 假设csv文件是:

file1.csv, file2.csv file3.csv

在更新过程中,数据会附加到csv文件的最后一行。

是否可以从csv文件中读取数据,并在更新后将其存储在arraycollection(deque)中。

有没有办法在csv文件更新时从中收集数据?

2 个答案:

答案 0 :(得分: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()

您可以将此与Ignacio的答案结合使用 - 使用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()

答案 1 :(得分:0)

将文件的当前大小与文件中的当前偏移量进行比较。如果大小更大,请阅读新数据。