返回顶部
首页 > 资讯 > 后端开发 > Python >[Python系列] 监听文件夹和文件
  • 370
分享到

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

python开发语言 2023-10-04 12:10:26 370人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

起因         经常在写程序的时候,要监听某个文件夹是否生成了新的文件,或者某个文件是否被修改了。也有时候是实时监控某个地方看看是不是被垃圾文件或病毒文件占据或者生成了log信息及时需要处理的。总而言之有很多种情况下,都需要对文件夹及

起因

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

过程

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

PyInotify

什么是PyInotify        

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

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

        使用 PyInotify,可以方便地实现文件系统监视功能,例如监控某个目录下的文件变化、监控进程的输出等。它还可以与 Python 的其他库集成,例如 DjangoflaskWEB 框架,实现 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.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

--结束END--

本文标题: [Python系列] 监听文件夹和文件

本文链接: https://lsjlt.com/news/423386.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [Python系列] 监听文件夹和文件
    起因         经常在写程序的时候,要监听某个文件夹是否生成了新的文件,或者某个文件是否被修改了。也有时候是实时监控某个地方看看是不是被垃圾文件或病毒文件占据或者生成了log信息及时需要处理的。总而言之有很多种情况下,都需要对文件夹及...
    99+
    2023-10-04
    python 开发语言
  • python文件夹,文件监听工具(pyi
    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 支持的监控事件 @cvar IN_ACCESS: File was accessed. @type IN_ACCESS: int @cvar IN_MODIFY: File...
    99+
    2023-01-31
    文件夹 文件 工具
  • python如何列出文件夹所有文件
    可以使用`os`模块中的`listdir`函数来列出文件夹中的所有文件。下面是一个简单的示例:```pythonimport osf...
    99+
    2023-09-22
    python
  • python列举文件夹下所有文件行数
        在群里聊天,看到一段代码,是可以统计文件夹下所有文件的行数,觉得不错,记录下来,以备将来有用的时候来派用场,下面贴上代码:   import os import fileinput dest="/root/log" for root...
    99+
    2023-01-31
    文件夹 行数 文件
  • Oracle 11g 监听相关文件
    [oracle@test admin]$ pwd /u01/app/oracle/product/11.2.0/db_1/network/admin [oracle@test admin]$ cat li...
    99+
    2024-04-02
  • oracle的监听文件在哪
    oracle 监听文件位于 %oracle_home%\network\admin\listener.ora(windows)或 $oracle_home/network/admin/l...
    99+
    2024-04-19
    oracle linux
  • Vista系统中的文件和文件夹加密
    加密文件/文件夹的方法     要在Windows Vista加密文件/文件夹,可按下面的操作步骤进行:     1、在资源管理器中找到待保护的文件/文件夹,右...
    99+
    2023-05-23
    文件 加密 和文 系统 文件夹 Vista
  • Linux系统怎么隐藏文件夹和文件
    这篇文章主要介绍“Linux系统怎么隐藏文件夹和文件”,在日常操作中,相信很多人在Linux系统怎么隐藏文件夹和文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统怎么隐藏文件夹和文件”的疑惑有所...
    99+
    2023-06-13
  • Python使用sftp实现传文件夹和文件
    利用python的sftp实现文件上传,可以是文件,也可以是文件夹。 版本Python2.7.13 应该不用pip安装更多的插件,都是自带的 不多说 上代码 # -*- codi...
    99+
    2024-04-02
  • python判断文件和文件夹是否存在
    python判断文件和文件夹是否存在 2009-07-02 10:49 import osos.path.isfile('test.txt') #如果不存在就返回Falseos.path.exists(directory) #如果目录...
    99+
    2023-01-31
    是否存在 文件夹 文件
  • Android创建文件实现对文件监听示例
    代码如下:public class FileObserverTest extends Activity{@Overrideprotected void onCreate(Bu...
    99+
    2022-06-06
    示例 监听 Android
  • java如何监听文件变化并读取文件
    Java中可以使用java.nio.file包中的WatchService类来监听文件的变化,并使用BufferedReader类来...
    99+
    2023-09-26
    java
  • java怎么监听文件变化并读取文件
    Java可以通过使用Java NIO包中的WatchService类来监听文件变化,并使用Java IO或Java NIO来读取文件...
    99+
    2023-10-27
    java
  • jQuery如何监听文件上传事件?
    这篇文章将为大家详细讲解有关jQuery如何监听文件上传事件?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery 监听文件上传事件 jQuery 提供了多种方法来监听文件上传事件。以下是两种最常用...
    99+
    2024-04-02
  • linux怎么列出文件夹所有文件
    在Linux中,你可以使用以下命令来列出文件夹中的所有文件:```ls```默认情况下,`ls`命令将以一列方式显示当前目录中的所有...
    99+
    2023-08-28
    linux
  • oracle监听文件listener.ora for 10g/11g
    ----------------------oracle 11g---------------------- SID_LIST_LISTENER =   (SID_L...
    99+
    2024-04-02
  • oracle怎么监听配置文件
    在Oracle数据库中,可以使用以下方法来监听和配置监听器文件: 监听器配置文件监听器.ora:监听器配置文件通常位于ORACL...
    99+
    2024-04-09
    oracle
  • Python怎么使用sftp实现传文件夹和文件
    小编给大家分享一下Python怎么使用sftp实现传文件夹和文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是...
    99+
    2023-06-14
  • Python如何判断文件和文件夹是否存在
    本篇内容主要讲解“Python如何判断文件和文件夹是否存在”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何判断文件和文件夹是否存在”吧!一、python判断文件和文件夹是否存在、创...
    99+
    2023-07-04
  • 认识oracle监听器配置文件
    同一个主机的同一个数据库,只能有一个监听器,我们所配置多个监听器时,它会监听另外一台主机上的数据库,但这样性能不好。listener.ora配置文件讲解:监听器部分:LISTENER =  (DE...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作