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 に答える