我的编程空间,编程开发者的网络收藏夹
学习永远不晚

[Python系列] 监听文件夹和文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

[Python系列] 监听文件夹和文件

起因

        经常在写程序的时候,要监听某个文件夹是否生成了新的文件,或者某个文件是否被修改了。也有时候是实时监控某个地方看看是不是被垃圾文件或病毒文件占据或者生成了log信息及时需要处理的。总而言之有很多种情况下,都需要对文件夹及文件进行监控并且及时作出相应的处理。这时候,一个简单的python脚本就能很好地解决问题了。

过程

        简单地查了一下相应的库,有两个推荐的库可以很轻松地做到这个事,PyInotify和WatchDog,还是简单地看一下。      

PyInotify

什么是PyInotify        

        PyInotify 是一个 Python 库,用于监视文件系统事件,例如文件的创建、删除、移动、重命名等。它基于 inotify 库,提供了一个 Python API,方便开发者使用。

        PyInotify 支持 cross-platform,可以在 Linux、macOS 和 Windows 等操作系统上使用。它提供了多种方式来监视文件系统事件,例如通过回调函数、生成事件队列、异步监视等。

        使用 PyInotify,可以方便地实现文件系统监视功能,例如监控某个目录下的文件变化、监控进程的输出等。它还可以与 Python 的其他库集成,例如 Django、Flask 等 Web 框架,实现 Web 应用的文件系统监视功能。

        总结起来,PyInotify 是一个功能强大、易于使用的 Python 库,用于监视文件系统事件。它提供了多种监视方式,支持 cross-platform,是开发文件系统监视应用的理想选择。

安装和使用

        我们还是通过pip安装:

pip install pyinotify

这时候,我们就可以直接在脚本中import进来使用了

import pyinotify# 初始化 Inotify 实例  inotify_instance = pyinotify.Init()# 设置监视目录    sys.argv[1]为需要监视的目录inotify_instance.add_watch(sys.argv[1], pyinotify.IN_DELETE | pyinotify.IN_CREATE | pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO)# 循环等待事件  while True:     event = inotify_instance.wait()   # 处理事件     if event.is_deleted():         print(f"文件 {event.pathname()} 被删除")     elif event.is_created():         print(f"文件 {event.pathname()} 被创建")     elif event.is_moved_from():         print(f"文件 {event.pathname()} 从 {event.old_pathname()} 移动到当前位置")     elif event.is_moved_to():         print(f"文件 {event.pathname()} 从 {event.old_pathname()} 移动到 {event.pathname()}")# 退出 Inotify 实例  inotify_instance.close()  

        在这个示例程序中,我们首先通过 pyinotify.Init() 初始化 Inotify 实例。然后,我们使用 inotify_instance.add_watch() 设置监视目录,并指定监视的事件类型,包括文件的创建、删除、移动等。

        接下来,我们使用 inotify_instance.wait() 循环等待事件。每当有事件发生时,我们会通过 event.is_deleted()、event.is_created()、event.is_moved_from() 和 event.is_moved_to() 方法判断事件类型,并输出相应的信息。

        最后,在程序结束时,我们使用 inotify_instance.close() 退出 Inotify 实例。

        这个示例可以通过在命令行中运行 python pyinotify_example.py 来启动。例如,如果在命令行中运行 python pyinotify_example.py /home/user/docs,则程序将监视 /home/user/docs 目录下的文件变化,并在控制台输出相应的信息。

 PyInotify的原理

        PyInotify 的原理是通过 inotify 库与 Linux 内核中的 inotify 系统调用接口,来实现对文件系统事件的监视。

        inotify 是 Linux 内核中的一个系统调用,用于监视文件系统事件。它可以监视指定目录下的文件事件,包括文件的创建、删除、移动、重命名等。inotify 提供了一个事件队列,可以存放正在等待处理的事件。当有新事件到达时,inotify 会将事件放入事件队列中,并通知进程。进程可以从事件队列中读取事件,并根据事件类型进行相应的处理。

PyInotify 通过封装 inotify 系统调用,提供了一个 Python API,方便开发者使用。它主要包括以下几个步骤:

        初始化 Inotify 实例:使用 pyinotify.Init() 函数初始化 Inotify 实例,并返回一个 Inotify 实例对象。

        添加监视目录:使用 inotify_instance.add_watch() 函数将目录添加到 Inotify 实例的监视列表中。

        等待事件:使用 inotify_instance.wait() 函数等待 Inotify 实例中的事件。

        处理事件:当有新事件到达时,使用 event.is_deleted()、event.is_created()、event.is_moved_from() 和 event.is_moved_to() 方法判断事件类型,并进行相应的处理。

        退出 Inotify 实例:使用 inotify_instance.close() 函数退出 Inotify 实例。

通过这些步骤,PyInotify 可以实现对文件系统事件的监视,并在事件发生时触发相应的处理函数。这使得开发者可以方便地实现文件系统监视功能,例如监控某个目录下的文件变化、监控进程的输出等。

WatchDog

什么是watchdog

        watchdog 库是一个用于监视文件系统事件的第三方库。它提供了一个 Python API,方便开发者使用。watchdog 库支持跨平台,可以在 Linux、macOS 和 Windows 等操作系统上使用。它提供了多种方式来监视文件系统事件,例如通过回调函数、生成事件队列、异步监视等。使用 watchdog 库,可以方便地实现文件系统监视功能,例如监控某个目录下的文件变化、监控进程的输出等。watchdog 库还支持与 Python 的其他库集成,例如 Django、Flask 等 Web 框架,实现 Web 应用的文件系统监视功能。

安装和使用

我们直接通过Pip库安装吧:

pip install watchdog

然后写个python程序试验一下:

import time  from watchdog.observers import Observer  from watchdog.events import FileSystemEventHandlerclass MyHandler(FileSystemEventHandler):     def on_modified(self, event):         print(f"文件 {event.class="lazy" data-src_path} 被修改")if __name__ == "__main__":     event_handler = MyHandler()     observer = Observer()     observer.schedule(event_handler, path='listen directory', recursive=False)     observer.start()     try:         while True:             time.sleep(1)     except KeyboardInterrupt:         observer.stop()     observer.join()

        在这个示例中,我们监听的文件夹是程序中'listen directory'这个位置,把这个字符串修改成需要监听的文件夹就行了。实现方式是这样的,我们首先创建一个名为 MyHandler 的类,它继承自 FileSystemEventHandler。然后,我们重写 on_modified 方法,用于处理文件修改事件。当文件被修改时,我们会输出文件的路径。

        接下来,我们创建一个 Observer 实例,并使用 schedule 方法注册事件处理器。我们指定要监视的目录路径和处理事件的函数,即 MyHandler 类的 on_modified 方法。

        最后,我们启动观察者(observer.start()),并使用一个无限循环来等待事件。在循环中,我们会定期检查是否有新事件。如果有,我们会处理它们。当发生 KeyboardInterrupt 事件时,我们停止观察者(observer.stop()),并等待它完成处理(observer.join())。

        这个示例可以通过在命令行中运行 python watchdog_example.py 来启动。例如,如果在命令行中运行 python watchdog_example.py,则程序将监视当前目录下的文件变化,并在控制台输出相应的信息。

watchdog的原理 

        watchdog 库的原理是通过在文件系统中注册一个监视器来监视文件事件,当有事件发生时,监视器通知 watchdog 库,watchdog 库再将事件传递给注册的观察者。观察者通过实现 FileSystemEventHandler 类的方法来处理文件事件。

PyInotify和WatchDog的区别

        PyInotify 和 watchdog 都是用于监视文件系统事件的 Python 库,但它们有一些关键区别:

        底层实现:PyInotify 基于 inotify 库,而 watchdog 库基于 inotify 和 kqueue(一个用于监视文件系统事件的 Linux 内核 API)。这意味着 PyInotify 仅支持 Linux 系统,而 watchdog 可以运行在 Linux、macOS 和 Windows 等多个操作系统上。

        事件处理方式:PyInotify 使用事件队列的方式处理文件系统事件,而 watchdog 使用回调函数的方式。这意味着 PyInotify 需要手动从事件队列中读取事件并进行处理,而 watchdog 可以在事件发生时直接调用注册的处理器函数。

        支持的功能:PyInotify 支持的功能较为简单,主要用于监视目录下的文件事件,包括文件的创建、删除、移动、重命名等。而 watchdog 库支持的功能更为丰富,可以监视文件的读写操作、属性改变、链接改变等。此外,watchdog 还支持监视子进程的输出、日志记录等功能。

        使用场景:PyInotify 更适合用于简单的文件系统监视任务,例如监控某个目录下的文件变化。而 watchdog 库的功能更为丰富,适用于更复杂的场景,例如监控进程的输出、监控网络连接等。

        总的来说,PyInotify 和 watchdog 都是用于监视文件系统事件的 Python 库,但它们的底层实现、事件处理方式、支持的功能和使用场景等方面存在一些关键区别。开发者可以根据自己的需求选择合适的库来实现文件系统监视功能。

来源地址:https://blog.csdn.net/u013379032/article/details/131582358

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

[Python系列] 监听文件夹和文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python文件夹,文件监听工具(pyi

全栈工程师开发手册 (作者:栾鹏) 架构系列文章支持的监控事件@cvar IN_ACCESS: File was accessed.@type IN_ACCESS: int@cvar IN_MODIFY: File was modified
2023-01-31

python如何列出文件夹所有文件

可以使用`os`模块中的`listdir`函数来列出文件夹中的所有文件。下面是一个简单的示例:```pythonimport osfolder_path = 'path_to_folder' # 指定文件夹路径# 使用listdir函数列
2023-09-22

python列举文件夹下所有文件行数

在群里聊天,看到一段代码,是可以统计文件夹下所有文件的行数,觉得不错,记录下来,以备将来有用的时候来派用场,下面贴上代码: import os import fileinput dest="/root/log" for root,dirs,
2023-01-31

Linux系统怎么隐藏文件夹和文件

这篇文章主要介绍“Linux系统怎么隐藏文件夹和文件”,在日常操作中,相信很多人在Linux系统怎么隐藏文件夹和文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统怎么隐藏文件夹和文件”的疑惑有所
2023-06-13

Vista系统中的文件和文件夹加密

加密文件/文件夹的方法 要在Windows Vista加密文件/文件夹,可按下面的操作步骤进行: 1、在资源管理器中找到待保护的文件/文件夹,右键单击选择“属性&AGRxwrdquo;; 2、在&ldqu
2023-05-23

oracle的监听文件在哪

oracle 监听文件位于 %oracle_home%\network\admin\listener.ora(windows)或 $oracle_home/network/admin/listener.ora(unix/linux)。要查找
oracle的监听文件在哪
2024-04-19

python判断文件和文件夹是否存在

python判断文件和文件夹是否存在2009-07-02 10:49import osos.path.isfile('test.txt') #如果不存在就返回Falseos.path.exists(directory) #如果目录不存在就返
2023-01-31

linux怎么列出文件夹所有文件

在Linux中,你可以使用以下命令来列出文件夹中的所有文件:```ls```默认情况下,`ls`命令将以一列方式显示当前目录中的所有文件和文件夹。如果你想要显示详细的文件信息,可以使用`ls -l`命令:```ls -l```如果你想要包括
2023-08-28

java怎么监听文件变化并读取文件

Java可以通过使用Java NIO包中的WatchService类来监听文件变化,并使用Java IO或Java NIO来读取文件。以下是一种基本的使用WatchService监听文件变化的方法:创建WatchService对象并注册要
2023-10-27

java如何监听文件变化并读取文件

Java中可以使用java.nio.file包中的WatchService类来监听文件的变化,并使用BufferedReader类来读取文件。下面是一个简单的示例代码:```javaimport java.io.BufferedReader
2023-09-26

Android创建文件实现对文件监听示例

代码如下:public class FileObserverTest extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.o
2022-06-06

jQuery如何监听文件上传事件?

jQuery监听文件上传事件jQuery提供了多种方法来监听文件上传事件,包括使用change事件处理程序、submit事件处理程序,以及FormData和XMLHttpRequest进行高级操作。处理程序可以执行各种逻辑,如显示进度条、验证文件、发送数据到服务器。本文介绍了如何监听文件上传事件,并提供了使用jQuery和XMLHttpRequest显示进度条的示例。
jQuery如何监听文件上传事件?
2024-04-08

oracle怎么监听配置文件

在Oracle数据库中,可以使用以下方法来监听和配置监听器文件:监听器配置文件监听器.ora:监听器配置文件通常位于ORACLE_HOME/network/admin目录下,文件名为listener.ora。可以使用文本编辑器打开该文件,并
oracle怎么监听配置文件
2024-04-09

Python如何判断文件和文件夹是否存在

本篇内容主要讲解“Python如何判断文件和文件夹是否存在”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何判断文件和文件夹是否存在”吧!一、python判断文件和文件夹是否存在、创
2023-07-04

python 文件夹拷贝

记录用python 处理文件以及文件夹的拷贝。#coding:utf-8import osimport sysimport getpassimport shutil# shutil.copyfile("oldfile","newfile")
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录