持续解析被其他进程更新的CSV文件
如果我有一堆 csv
文件,并且这些文件会定期更新。假设这些 csv
文件是:
file1.csv, file2.csv file3.csv
在更新的过程中,数据会被添加到 csv
文件的最后一行。
有没有办法在 csv
文件更新时读取数据,并把它存储到一个 数组
或者 集合(deque)
中呢?
有没有什么方法可以在 csv
文件更新时收集这些数据?
2 个回答
0
把文件现在的大小和文件内部的当前位置进行比较。如果文件的大小更大,就读取新的数据。
2
你可以使用一个叫做 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()