Python3, 多种方法实现文件/目录的监听,只想说一个字:泰裤辣。

简介: 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很不爽。


image.gif



为了让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库

其实,还有一些其他的库, 这里小鱼就不做过多的介绍了。

目录
相关文章
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
323 1
|
2月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
984 2
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
125 2
|
3月前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
119 0
|
2月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
391 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
1月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
3月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
248 4
|
2月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
3月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
151 0
|
3月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
158 0