1

我正在使用看门狗来监视创建文件的目录(和子目录)。如果创建的文件是 .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()
4

1 回答 1

1

我认为您可能需要在找到文件后立即添加睡眠。我认为您的脚本在管道中有实际数据之前正在阅读它。

于 2013-09-16T15:23:12.700 回答