PatternMatchingEventHandler Игнорирует шаблон, который я не установил в его атрибут

#python #python-watchdog

#python #python-watchdog

Вопрос:

Я использую Watchdog, чтобы следить за папкой, в которой моя машина генерирует файлы CSV. Но перед генерацией CSV-файла моя машина генерирует временный файл, а затем он преобразуется в правильный CSV. Поэтому, чтобы игнорировать временный файл, который был помещен в просматриваемую папку, я использовал PatternMatchingEventHandler.

Код для того же самого приведен ниже

 class Watcher:
    def __init__(self, args):
        self.watch_dir = os.getcwd()
        print(args[0])
        self.directory_to_watch = os.path.join(self.watch_dir, args[1])
        self.observer = Observer()
        self.event_handler = Handler(patterns=["*.CSV"], ignore_patterns=["*.tmp"], ignore_directories=True)
        #self.event_handler = Handler()

    def run(self):
        self.observer.schedule(self.event_handler, self.directory_to_watch, recursive=False)
        self.observer.start()
        try:
            while True:
                time.sleep(1)
        except:
            self.observer.stop()
            print("Error")

        self.observer.join()
  

Когда я помещаю файл с расширением .temp в папку, за которой ведется наблюдение, наблюдатель игнорирует файл. Несмотря на указание «*.tmp» в атрибуте ignore_function, он проигнорировал файл » .temp». Как убедиться, что мой обработчик работает должным образом?

Заранее спасибо.

Ответ №1:

Это поведение связано с предоставленным вами аргументом patterns. Он будет игнорировать все, что не является *.csv, включая файлы .temp и .tmp. Если вы хотите создавать события для .temp файлов, вам нужно будет указать это в аргументе patterns:

self.event_handler = Handler(patterns=["*.CSV","*.temp"], ignore_directories=True)

Аргумент ignore_patterns if для игнорирования некоторых шаблонов, которые соответствуют критериям в шаблонах:

self.event_handler = Handler(patterns=["*.CSV"], ignore_patterns=["temp"], ignore_directories=True)

Это позволит использовать все CSV-файлы, но запретит «temp.csv»