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

2023-11-17

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

然后就是等待着安装。

其它安装方式,直接看这两篇:

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

然后就是等待着安装。

其它安装方式,直接看这两篇:

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技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • openwrt 应用程序 开机自启动

    这几介绍一下openwrt 应用程序包开机自启动的两种方法 使用的平台是MTK7688开发板 首先写一个以及可以跑起来的工程 这里对工程就不做展开 以helloworld工程为例 helloworld工程写在 openwrt package
  • Python bs4怎么安装?

    bs4是BeautifulSoup4的简称 它是一个可以从HTML中提取数据的Python第三方库 具体来讲 bs4可以从茫茫的HTML代码中准确查找出你想要的内容 甚至一个小小的字符串 听起来是不是感觉bs4很厉害的样子 那么 Pytho
  • 预测模型的评价指标Matlab

    一般情况下 所要预测的数据分为连续型数据和离散性数据 连续型数据比如成绩分数 时间序列等 离散性数据通常为划分的分类标签 针对不同的数据类型 衡量模型的准确程度采用不同指标 如比较一些算法的准确率 若预测的数据为离散型 则算法的准确性自然容
  • 【综合转贴】CSS “点 ”“井号”的含义and ID class区别.

    body font family Arial sans serif color 333333 line height 1 166 margin 0px padding 0px masthead margin 0 padding 10px 0
  • 【3月比赛合集】45场可报名的数据挖掘奖金赛,任君挑选!

    CompHub 实时聚合多平台的数据类 Kaggle 天池 和OJ类 Leetcode 牛客 比赛 本账号同时会推送最新的比赛消息 欢迎关注 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考 以比赛官网为准 目录
  • k8s部署之ETCD集群

    k8s部署之ETCD集群 1 etcd下载 etcd下载地址 https github com coreos etcd releases 从github etcd的发布页面选取相应的版本用 wget url 来下载 如 wget https
  • 【易售小程序项目】小程序首页(展示商品、商品搜索、商品分类搜索)【后端基于若依管理系统开发】

    文章目录 界面效果 界面实现 工具js 页面 首页 让文字只显示两行 路由跳转传递对象 将商品分为两列显示 使用中划线划掉原价 后端 商品 controller service mapper sql 同项目其他文章 界面效果 说明 界面中商
  • Docker容器中如何运行一个带GUI的app?

    问 How can you run GUI apps in a docker container Are there any images that set up vncserver or something so that you can
  • 图像处理之-----插值算法

    插值算法是图像处理中最基本的算法 首先我们先了解一下什么是插值算法 以及插值算法在图像处理过程中的应用 1 什么是插值 Interpolation is a method of constructing new data points wi
  • Redis 密码设置和查看密码

    Redis 密码设置和查看密码 redis没有实现访问控制这个功能 但是它提供了一个轻量级的认证方式 可以编辑redis conf配置来启用认证 1 初始化Redis密码 在配置文件中有个参数 requirepass 这个就是配置redis
  • Python软件开发之需求实现:数据结构、数据类型。自动化软件测试必会

    一 有这样的一个需求 判断学生成绩是否及格 二 拿到这样的一个需求如何进行需求分析呢 做为测试人员 我们只有明确需求后 才不容易漏测 需求分析阶段 一 看到这样的一句话之后我们有几个问题需求和产品经理确认的 1 什么样的算及格 60 70分
  • Spark 启动集群 Master 正常启动 Worker 不启动

    在学习spark过程中遇到的问题 做下记录 这个问题网上出现的不再少数 出现问题的原因也是各不相同 并且没有一个人的问题和我完全一样 我高兴得都快哭了 顺着大家的思路 尝试了两个多小时才搞明白 问题的根源大多都在于 hostname 的配置
  • C++ STL - vector 模拟实现+解析迭代器

    目录 vector使用 vector模拟实现 vector实现解析 memcpy进行元素拷贝问题 扩容问题 vector迭代器解析 vector迭代器失效问题 1 示例一 一个典型的迭代器失效bug insert实现 2 示例二 inser
  • 记录一些可能会用到资料

    1 win11子系统WSL修改用户密码 以管理员身份打开 PowerShell 输入命令 wsl exe user root passwd root 修改 root 用户密码 2 layDate控件在页面高度不够的情况下闪退 在laydat
  • 8x8LED点阵

    点量这个只需要把9高电平 13低电平就可以了 共阳极点阵 行线是led的正极 列线是led的列线 左上角点亮 显示多个灯是动态扫描的 一个一个显示的 然后间隔速度要快就可以造成显示 点阵由两篇74Hc595级联在一起驱动的 只需要三个io口
  • matplotlib输出图形到网页_Python实操:手把手教你用Matplotlib把数据画出来

    导读 获取数据之后 而不知道如何查看数据 用途还是有限的 幸好 我们有Matplotlib Matplotlib 是基于 NumPy 数组构建的多平台数据可视化库 它是John Hunter 在2002年构想的 原本的设计是给 IPytho
  • 【LeetCode与《代码随想录》】哈希表篇:做题笔记与总结-JavaScript版

    文章目录 代码随想录 主要题目 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和 经典哈希 454 四数相加 II 15 三数之和 双指针 18 四数之和 双指针 相关题目 383 赎金信 49 字母异位词分组
  • mnist数据集之自己写的数字

    这是我自己用画图3D写的数字0 9 然后又把它们修改成了28 28像素的格式 并经过测试后输出了预测值 不知道怎么搞得 顺序打乱了 这是我测试后的结果 要加油哦
  • C语言——执行创建多个文件同时写入内容

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

    多种方法实现文件 目录监听 1 引言 2 代码实战 2 1 os模块 2 2 watchdog库 2 2 1 安装 2 2 2 示例 2 3 inotify 2 3 1 安装 2 3 2 示例 3 总结 1 引言 小屌丝 鱼哥 帮我看下这段