【发布时间】:2013-09-16 14:15:42
【问题描述】:
我正在使用看门狗来监视目录(和子目录)中创建的文件。如果创建的文件是 .csv,程序会读取它们(并对文件进行一些小的更改,但这实际上不是问题的一部分)。问题是有时 readlines() 返回一个空列表,我无法弄清楚它为什么这样做。即使我只是将相同的 .csv 文件复制到受监视的目录,它也会偶尔返回一个空列表,因此问题似乎不是 .csv 文件。我在 OSX 上运行 python 2.7.5。 那么有人明白为什么会这样吗?
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class CreatedHandler(FileSystemEventHandler):
def on_created(self, event):
if event.is_directory:
return
filepath, ext = os.path.splitext(event.src_path)
if (ext == '.csv' and '-fixed' not in filepath):
lines = list()
with open(event.src_path, 'r') as f:
lines = f.readlines()
print len(lines)
if __name__ == "__main__":
event_handler = CreatedHandler()
observer = Observer()
observer.schedule(event_handler, '.', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
【问题讨论】:
-
也许它在完整复制之前正在读取 csv。
-
谢谢。好像就是这样。我在文件打开之前添加了一个 time.sleep(0.5),现在 readlines 返回一个非空列表(即使使用大型 csv 文件)。因此,如果您想添加您的评论作为答案,我可以接受。