Python watchdog 监视通过模式匹配创建新文件
Python watchdog Watch For the Creation of New File By Pattern Match
我还在学习 Python 所以我先道歉。我正在尝试编写一个监视程序来监视与特定模式匹配的文件的创建。我正在使用带有一些代码的看门狗来让它监视一个目录。
我不太明白如何让 watcher 监视与模式匹配的文件名。我已经用我认为可能有用的方法编辑了 regexes=[]
字段,但我运气不好。
以下是可能出现的文件示例:Hires For Monthly TM_06Jan_0946.CSV
当在目录中创建 .CSV 时,我可以让观察者告诉我,但我无法让它只在 Hires.*\.zip
基本创建时告诉我。
我已经检查了这个 link 但没有运气
这是我的代码:
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() ```
'.*'
正则表达式起作用而 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 文件和以 "Hires" 开头的 zip 文件。 '.*?'
与 "C:\Users\Downloads" 匹配,其余确保文件类型、文件名等。
我还在学习 Python 所以我先道歉。我正在尝试编写一个监视程序来监视与特定模式匹配的文件的创建。我正在使用带有一些代码的看门狗来让它监视一个目录。
我不太明白如何让 watcher 监视与模式匹配的文件名。我已经用我认为可能有用的方法编辑了 regexes=[]
字段,但我运气不好。
以下是可能出现的文件示例:Hires For Monthly TM_06Jan_0946.CSV
当在目录中创建 .CSV 时,我可以让观察者告诉我,但我无法让它只在 Hires.*\.zip
基本创建时告诉我。
我已经检查了这个 link 但没有运气
这是我的代码:
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() ```
'.*'
正则表达式起作用而 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 文件和以 "Hires" 开头的 zip 文件。 '.*?'
与 "C:\Users\Downloads" 匹配,其余确保文件类型、文件名等。