Python监听指定路径下文件夹变化
一、使用Python监听Windows系统中的新增文件夹
在日常工作中,许多任务需要我们监控特定目录,以便实时获取新创建的文件夹。这一需求在数据管理、文件备份和监控某些特定活动(如下载文件夹)时尤为重要。本文将介绍如何使用Python来监听Windows系统中指定目录的新增文件夹,并给出相关代码示例及运行说明。
监听文件夹及其工作原理
我们将利用Python中的watchdog
库来实现文件夹的监听功能。watchdog
是一个跨平台库,能够自动监控文件系统的变化。
安装依赖库
首先,我们需要安装watchdog
库。可以通过以下命令在终端中安装:
pip install watchdog
下面是一个完整的示例:
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 定义一个事件处理器
class MyHandler(FileSystemEventHandler):
def on_created(self, event):
# 仅监视文件夹的创建
if event.is_directory:
print(f"新增文件夹: {event.src_path}")
def monitor_directory(path):
# 创建事件处理器实例
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=False)
observer.start()
print(f"开始监听目录: {path}")
try:
while True:
pass # 保持程序运行
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
# 输入你的目标目录路径
folder_to_monitor = "C:\\path\\to\\your\\directory"
monitor_directory(folder_to_monitor)
代码解析
- 引入库:导入
os
和watchdog
的相关模块。 - 创建事件处理器:我们定义了一个
MyHandler
类,继承自FileSystemEventHandler
。该类实现了on_created
方法,用于当文件夹被创建时输出消息。 - 设置观察者:创建一个
Observer
实例并指定需要监控的目录。recursive=False
表示只监控指定目录,而不包括子目录。 - 启动观察:调用
observer.start()
方法开始监听,并通过一个无限循环保持程序运行。 - 异常处理:通过
KeyboardInterrupt
来优雅地停止监听。
运行示例
将上述代码保存为monitor.py
,然后在命令行中运行:
python monitor.py
程序将开始监听指定的目录,一旦有新的文件夹被创建,它会在终端中输出相关信息。
二、监控文件夹
及其内部文件的新增、删除、修改以及重命名等事件
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 定义事件处理器类
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f'File modified: {event.src_path}')
def on_created(self, event):
print(f'File created: {event.src_path}')
def on_deleted(self, event):
print(f'File deleted: {event.src_path}')
# 对于文件夹的创建、删除操作,请注意:
# 目录级别的事件可通过on_moved方法捕获,因为创建和删除目录也表现为移动事件
def on_moved(self, event):
if event.is_directory:
what = "Directory"
else:
what = "File"
print(f'{what} moved: {event.src_path} to {event.dest_path}')
# 初始化事件处理器实例
event_handler = MyHandler()
# 指定要监控的文件夹路径
watched_dir = '/path/to/watch'
# 初始化观察器
observer = Observer()
# 将事件处理器关联到观察器
observer.schedule(event_handler, watched_dir, recursive=True)
# 启动观察器
observer.start()
print(f'Starting to watch {watched_dir} for file system events...')
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
在这个例子中,MyHandler 类继承了 FileSystemEventHandler 并实现了几个方法来处理不同的文件系统事件。
on_modified 方法会在文件被修改时触发;
on_created 在文件或目录被创建时触发;
on_deleted 在文件或目录被删除时触发。
对于目录的创建和删除操作,由于Watchdog将它们视为移动操作,因此通过 on_moved 方法进行捕捉,并检查 event.is_directory 属性以区分是文件还是目录。
通过 observer.schedule 方法设置要监控的目录路径和事件处理器,并设置 recursive=True 参数以递归地监控目录内的所有子目录。
最后启动观察器并进入无限循环,直到用户按下 Ctrl+C 中断程序,此时会调用 observer.stop() 和 observer.join() 来正确停止和清理观察器资源。
参考:
windows 系统python对指定目录监听新增的文件夹_mob64ca12dc54c5的技术博客_51CTO博客
python watchdog 监测文件夹新增、删除、修改文件夹_python监控文件夹新增文件-CSDN博客