Python 监控文件或目录变化通常使用第三方库 watchdog
。以下是完整的攻略:
安装watchdog
在终端中执行以下命令进行安装:
pip install watchdog
监控文件的变化
以下是监控文件变化的示例代码:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
if event.is_directory:
return None
else:
print(f'File {event.src_path} has been modified.')
if __name__ == '__main__':
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
代码中使用了 Observer
实例来监听事件,这个实例会在你的文件或目录发生变化时接收到一个事件。FileSystemEventHandler
基类用于处理这些事件,你可以重写这个类的方法。
在 on_modified
方法中,我们检查事件是否来自于文件,如果是,就打印出文件名称和所在路径。
这个代码示例初始化要在当前目录( path='.'
)里监听变化,通过控制台运行后会一直运行着,直到手动停止或发生异常等。
监控目录结构的变化
我们也可以使用 watchdog
监听整个文件夹结构的变化,包括文件的添加、删除和移动等。以下是监控目录结构变化的示例代码:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_any_event(self, event):
if event.is_directory:
print(f'Directory {event.src_path} has been modified.')
else:
print(f'File {event.src_path} has been modified.')
if __name__ == '__main__':
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()
在此示例代码中,文件系统事件处理程序中的 on_any_event
方法将处理所有类型的事件。如果事件来自于目录,则执行此方法。注意:在此示例中 recursive=True
表示递归搜索整个目录树,而不仅是当前目录。
使用以上示例可以轻松地监控文件和目录的变化,更好地管理文件系统。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python监控文件或目录变化 - Python技术站