【问题标题】:python watchdog monitoring directory for created files and doing something to that filepython看门狗监视创建文件的目录并对该文件执行某些操作
【发布时间】: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 文件)。因此,如果您想添加您的评论作为答案,我可以接受。

标签: python watchdog


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多