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库

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

目录
相关文章
|
1月前
|
测试技术 API Python
【10月更文挑战第1天】python知识点100篇系列(13)-几种方法让你的电脑一直在工作
【10月更文挑战第1天】 本文介绍了如何通过Python自动操作鼠标或键盘使电脑保持活跃状态,避免自动息屏。提供了三种方法:1) 使用PyAutoGUI,通过安装pip工具并执行`pip install pyautogui`安装,利用`moveRel()`方法定时移动鼠标;2) 使用Pymouse,通过`pip install pyuserinput`安装,采用`move()`方法移动鼠标绝对位置;3) 使用PyKeyboard,同样需安装pyuserinput,模拟键盘操作。文中推荐使用PyAutoGUI,因其功能丰富且文档详尽。
WK
|
22天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
68 36
|
1月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
64 2
11种经典时间序列预测方法:理论、Python实现与应用
|
14天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
17 2
|
1月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
52 1
Python实用记录(十三):python脚本打包exe文件并运行
|
29天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
30天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
1月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
1月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
42 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数