Python3, 多种方法实现文件/目录的监听,只想说一个字:泰裤辣。
【摘要】 网友:确实,泰裤辣。
1、引言
小云:鱼哥,帮我看下这段代码。
小鱼:看不懂。
小云:我靠, 你都没看,就说看不懂。
小鱼:看不见。
小云:我擦,你真是睁着眼睛说瞎话。
小鱼:…(不说话,只摇头)
小云:你行,连话都不说了。
小鱼:…(点头)
小云:听说最近新开一家…
小鱼:我知道你说的那家, 一般般。
小云:… 我特喵 还没说新开的啥,你就知道了 。
小鱼:早起的鸟儿有虫吃,
小云:我承认你起得早, 但是,帮我看下这段代码。
小鱼:我看过了,不就是实现 文件的监听嘛
小云:唉我去~~你啥时候看到的。
小鱼:咱俩聊天的时候啊。
小云:那你给指导指导呗。
小鱼:我不知道, 我啥也不知道。
小云:我说,你给我指导一下,这段代码。
小鱼:昂, 这,好吧。
我们先看这段代码,
import os
import time
# 监听的目录路径
path_to_watch = 'D:\project'
# 初始化目录中的文件列表
# before = dict([(f, None) for f in os.listdir(path_to_watch)])
before = [f for f in os.listdir(path_to_watch)]
print(before)
def do_something(added):
print('Added:', ', '.join(added))
while True:
time.sleep(1)
# 获取目录中的文件列表
after = [f for f in os.listdir(path_to_watch)]
# 获取新增的文件列表
added = [f for f in after if f not in before]
if added:
# 打印新增的文件名称
do_something(added)
# 更新目录中的文件列表
before = after
乍一看,没有啥,写的还可以,
但是,这建立在文件不多的时候,如果文件特别多,那么,这段代码,会让你的CPU很不爽。
为了让CPU开心一些,我们就来改造这段代码。
2、代码实战
关于文件/目录的监听, 小鱼今天用3种方式来实现。
涉及到 Windows系统和Linux系统 。
2.1 os模块
代码示例
# -*- coding:utf-8 -*-
# @Time : 2023-07-05
# @Author : Carl_DJ
'''
实现功能:
使用os的stat函数,实现文件/目录的监听
'''
import os
import time
def file_monitor(path):
# 获取初始文件状态
last_stat = os.stat(path)
while True:
# 获取当前文件状态
current_stat = os.stat(path)
# 检查文件状态是否发生变化
if current_stat != last_stat:
print("File has been modified!")
# 更新文件状态
last_stat = current_stat
# 休眠一段时间后再次检测
time.sleep(1)
# 监听文件
file_monitor("path/to/file.txt")
2.2 watchdog库
2.2.1 安装
涉及到第三方库,肯定就需要安装
老规矩,pip 安装
pip install watchdog
然后就是等待着安装。
其它安装方式,直接看这两篇:
- 《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
- 《Python3:我低调的只用一行代码,就导入Python所有库!》
2.2.2 示例
代码示例
# -*- coding:utf-8 -*-
# @Time : 2023-07-05
# @Author : Carl_DJ
'''
实现功能:
使用watchdog库,实现文件/目录的监听
'''
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class FileEventHandler(FileSystemEventHandler):
def on_modified(self, event):
print("File has been modified!")
def file_monitor(path):
event_handler = FileEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
# 监听文件
file_monitor("path/to/file.txt")
2.3 inotify
2.3.1 安装
涉及到第三方库,肯定就需要安装
老规矩,pip 安装
pip install inotify
然后就是等待着安装。
其它安装方式,直接看这两篇:
- 《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
- 《Python3:我低调的只用一行代码,就导入Python所有库!》
2.3.2 示例
代码示例
# -*- coding:utf-8 -*-
# @Time : 2023-07-05
# @Author : Carl_DJ
'''
实现功能:
使用inotify库,实现文件/目录的监听
'''
import pyinotify
class FileEventHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
print("File has been modified!")
def file_monitor(path):
wm = pyinotify.WatchManager()
mask = pyinotify.IN_MODIFY
handler = FileEventHandler()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch(path, mask, rec=False)
notifier.loop()
# 监听文件
file_monitor("path/to/file.txt")
3、总结
看到这里,今天的分享就到这里了。
今天主要针对文件/目录的监听进行了分享,主要就是:
- os的stat函数
- watchdog库
- inotify库
其实,还有一些其他的库, 这里小鱼就不做过多的介绍了。
我是小鱼:
- CSDN 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 51认证讲师等;
- 认证金牌面试官;
- 职场面试及培训规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)测评一、二等奖获得者;
关注我,带你学习更多更专业更前言的Python技术。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)