Python watchdog Watch для создания нового файла по шаблону Match - PullRequest
0 голосов
/ 19 марта 2020

Я все еще учусь Python, поэтому я прошу прощения заранее. Я пытаюсь написать наблюдателя, который следит за созданием файла, который соответствует указанному шаблону c. Я использую сторожевой таймер с некоторым кодом, который используется для просмотра каталога.

Я не совсем понимаю, как заставить наблюдателя наблюдать за именем файла, которое соответствует шаблону. Я отредактировал поле regexes=[] так, как мне кажется, может сработать, но мне не повезло.

Вот пример файла, который может прийти: Hires For Monthly TM_06Jan_0946.CSV

I может заставить наблюдателя сказать мне, когда в каталоге создается .CSV, я просто не могу заставить его сказать мне только, когда создается по существу Hires.*\.zip.

Я проверил эту ссылку, но не повезло Как правильно запустить RegexMatchingEventHandler of Watchdog?

Вот мой код:

import time
import watchdog.events 
from watchdog.observers import Observer
from watchdog.events import RegexMatchingEventHandler
import re
import watchdog.observers 
import time
import fnmatch
import os

class Handler(watchdog.events.RegexMatchingEventHandler): 
    def __init__(self): 
        watchdog.events.RegexMatchingEventHandler.__init__(self, regexes=['.*'], ignore_regexes=[], ignore_directories=False, case_sensitive=False) 

    def on_created(self, event): 
        print("Watchdog received created event - % s." % event.src_path) 


    def on_modified(self, event): 
        print("Watchdog received modified event - % s." % event.src_path) 



if __name__ == "__main__": 
    src_path = r"C:\Users\Downloads"
    event_handler = Handler() 
    observer = watchdog.observers.Observer() 
    observer.schedule(event_handler, path=src_path, recursive=True) 
    observer.start() 
    try: 
        while True: 
            time.sleep(1) 
    except KeyboardInterrupt: 
        observer.stop() 
    observer.join() ```

1 Ответ

0 голосов
/ 20 марта 2020

Причина, по которой регулярное выражение '.*' работает, а регулярное выражение Hires.*\.zip не работает, - watchdog пытается сопоставить полный путь с регулярным выражением. С точки зрения регулярного выражения: r'Hires.*\.zip' не даст вам полного соответствия с "C: \ Users \ Downloads \ Hires blah.zip"

Вместо этого попробуйте:

def __init__(self): 
    watchdog.events.RegexMatchingEventHandler.__init__(
            self, regexes=[r'^.*?\.cvs$', r'.*?Hires.*?\.zip'],
            ignore_regexes=[], ignore_directories=False, case_sensitive=False)

Это будет соответствовать всем файлам cvs, а файлы zip начинаются с "Hires". '.*?' соответствует "C: \ Users \ Downloads", а остальные обеспечивают типы файлов, имена файлов и т. Д. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...