首页 > 解决方案 > Python 看门狗监视通过模式匹配创建新文件

问题描述

我还在学习 Python,所以我先道歉。我正在尝试编写一个监视程序来监视与特定模式匹配的文件的创建。我正在使用带有一些代码的看门狗来让它监视目录。

我不太明白如何让观察者监视与模式匹配的文件名。我已经regexes=[]用我认为可能有用的方法编辑了该字段,但我没有运气。

以下是可能出现的文件示例:Hires For Monthly TM_06Jan_0946.CSV

我可以让观察者告诉我何时在目录中创建了 .CSV,但我无法让它只告诉我何时Hires.*\.zip创建。

我已经检查了这个链接但没有运气 如何正确运行看门狗的 RegexMatchingEventHandler?

这是我的代码:

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() ```

标签: regexpython-3.xpython-watchdog

解决方案


'.*'正则表达式起作用而Hires.*\.zip正则表达式不起作用的原因是看门狗试图将完整路径与正则表达式匹配。就正则表达式而言: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”匹配,其余确保文件类型、文件名等。


推荐阅读