模块介绍
watchdog 是一个强大的 Python 库,用于监控文件和目录的更改。它通过系统原生 API 实现高效的事件监控,能够捕捉文件的创建、删除、修改及重命名等多种操作。适配的 Python 版本为 3.6 及以上,开发者可以通过简单的函数调用以异步或同步的方式响应文件事件,更加高效地开发与文件系统相关的应用。
应用场景
watchdog 库广泛应用于需要对文件或目录更改进行监控的场景。例如:
- 日志监控:定期跟踪日志文件变化,及时处理异常或错误信息。
- 自动备份:监控特定目录,当文件变更时自动执行备份任务。
- 实时数据处理:在新数据文件生成时,自动启动数据处理流程,例如图像处理、数据清洗等。
- 文件同步工具:实现实时的文件同步功能,当源文件更改时自动更新目标文件。
安装说明
watchdog 并不是 Python 的内置模块,需要额外安装。可以使用 pip 命令进行安装:
用法举例
1. 监控目录变化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import time
class MyHandler(FileSystemEventHandler): def on_modified(self, event): print(f'文件被修改: {event.src_path}')
def on_created(self, event): print(f'文件创建: {event.src_path}')
event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path='监控目录路径', recursive=True) observer.start()
try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
|
2. 记录文件修改日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import logging from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
class LogHandler(FileSystemEventHandler): def on_modified(self, event): logging.info(f'文件被修改: {event.src_path}')
def on_deleted(self, event): logging.info(f'文件被删除: {event.src_path}')
event_handler = LogHandler() observer = Observer() observer.schedule(event_handler, path='监控目录路径', recursive=True) observer.start()
try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
|
3. 自动备份文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import shutil from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import os
class BackupHandler(FileSystemEventHandler): def on_modified(self, event): if not event.is_directory: src_file = event.src_path backup_file = f'备份目录/{os.path.basename(src_file)}' shutil.copy(src_file, backup_file) print(f'已备份: {src_file} 至 {backup_file}')
event_handler = BackupHandler() observer = Observer() observer.schedule(event_handler, path='监控目录路径', recursive=False) observer.start()
try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
|
在这些示例中,我们展示了如何利用 watchdog 库实现多种文件监控功能,从简单的文件创建和修改通知,到更复杂的操作如文件备份和日志记录,帮助解决常见的文件监控需求。
最后,我诚挚地请大家关注我的博客 —— 全糖冲击博客。在这里,我为大家准备了所有 Python 标准库的使用教程,方便你进行查询和学习。我会持续更新内容,分享实用的代码示例和技巧,帮助你提升编程能力。关注我的博客,让我们一起在学习和探索 Python 的路上,事半功倍!