0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python 如何对文件系统进行监控提取

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 15:25 次阅读

现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作。比如说应用到我们之前的高潮提取器:若当前文件夹下增加了一个音乐文件,监控器就调用高潮提取器,自动提取该音乐文件的高潮部分。

这样的监控器写起来也不难,但是很花时间,有许多情况要考虑。不过幸好我们是写Python的,有许多轮子可以使用。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南

在终端输入以下命令安装我们所需要的依赖模块:

pip install watchdog

看到 Successfully installed xxx 则说明安装成功。

2.基本使用

看门狗的使用并不复杂,请认真看以下代码和注释:

图片

可以看到代码中有几个关键步骤,

1.配置各项信息

2.生成事件处理器、监控器;

3.注册事件处理器、配置目录、递归执行(即同时监控子文件夹);

4:启动。

其实,看门狗的observer是基于 threading.Thread 对象的,所以observer很多属性都继承了 threading.Thread 的属性。

如果你不带参数地运行该脚本,就是要监控脚本文件所在的文件夹,如果要监控其他文件夹,记得运行时带文件夹的路径参数,如:

python obserber.py /data/home/ckend/

我们来试着运行看看:

图片

可以看到,我在当前文件夹下做的所有操作都被记录下来了。接下来我们就试试怎么自定义一些操作。

3.监控文件变化

如果你不知道怎么提取音乐文件的高潮部分,请看这篇文章:《Python自动提取音乐文件高潮》。

要实现这样的功能,我们有几种方法,一个是在原来log的处理器上做一些新增修改,比如多增一个函数调用音乐高潮提取器。第二个是重新继承 FileSystemEventHandler 类,并做相应的修改。这里我们还是要保留log的样式,只是在log的时候顺便提取音乐高潮,因此采用第一个方法。

看看LoggingEventHandler源代码中的on_created,这就是当文件创建时监控器的操作:

图片

我们仅需要继承这个类并对on_created进行修改,就能完成我们想要的功能:

图片

首先声明一个类,继承LoggingEventHandler,然后重载on_created函数,在这个函数中不仅记录文件事件变化,还要对mp3文件做一次音乐高潮提取。最后别忘了,生成事件处理器时要用我们新的类名。

看看效果,将小永远.mp3复制过来:

图片

成功监控文件变化并提取到音乐高潮,生成高潮文件。这样,只要你保持这个Python进程不关闭,它就会一直监控这个文件夹,一旦有音乐文件进入,就会自动提取它的音乐高潮,在linux系统下,可以搭配supervisor使用,非常好用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文件系统
    +关注

    关注

    0

    文章

    273

    浏览量

    19676
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66772
  • 监控器
    +关注

    关注

    1

    文章

    234

    浏览量

    26007
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

    如何提取image中的根文件系统?求助大神

    如何提取image中的根文件系统?求助大神
    发表于 05-12 17:22

    使用FPGA实现文件系统的问题

    由于一个项目中牵涉到了文件系统的实现,C语言里用链表可以对文件系统进行实现,但FPGA里没有指针和地址的概念,想请教一下,如何对文件进行创建
    发表于 04-20 14:19

    嵌入式Linux根文件系统怎么制作?

    在嵌入式Linux操作系统越中文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以
    发表于 04-06 07:39

    RT-Thread文件系统的资料下载

    本应用笔记将围绕下面几个问题来介绍RT-Thread 文件系统。如何移植各种类型的文件系统?如何对文件系统进行操作?如何在文件系统
    发表于 03-24 16:03

    进入低功耗模式前需要对文件系统或SDIO接口进行什么操作

    请教各位卸载文件系统为什么会失败?是不是操作方式错了?有没有更好的处理方式?进入低功耗模式前需要对文件系统或SDIO接口进行什么操作?如何处理卸载文件系统失败后导致的休眠RTC唤醒后挂
    发表于 08-10 11:14

    stm32如何使用aes对文件系统文件加密?

    请问有没我在好的库可以调用对文件系统文件加密解密
    发表于 09-20 07:56

    基于FAT的机顶盒PVR文件系统的研究

    简要介绍了机顶盒PVR功能,分析了机顶盒PVR功能对文件系统提出的要求,具体阐述了FAT文件系统的原理,在此基础上重点讨论了FAT文件系统在用于多媒体大文件时所应
    发表于 12-29 16:58 18次下载

    文件系统管理操作

    为了方便用户对设备存储设备进行有效的管理,设备提供了文件系统功能,实现对文件和目录的访问管理:用户可以通过命令行对文件进行创建、移动、拷贝、
    发表于 08-30 15:55 0次下载

    需要了解的Linux 系统中一些针对文件系统的节能技巧

    文件系统是 Linux 系统的重要组成部分,文件系统的配置和使用对整个系统的运行有着重要的影响。本文介绍了一些 Linux 系统
    发表于 04-27 19:22 549次阅读

    linux文件系统中的虚拟文件系统设计详解

    Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件
    发表于 04-02 14:37 1584次阅读
    linux<b class='flag-5'>文件系统</b>中的虚拟<b class='flag-5'>文件系统</b>设计详解

    什么是分布式文件系统

    我们无时无刻不在使用文件系统进行开发时在使用文件系统,浏览网页时在使用文件系统,玩手机时也在使用文件系统
    的头像 发表于 03-10 16:21 3659次阅读

    文件系统的分布式分发过程

    在传统NAS文件系统架构中,一般采用Active-Passive架构,文件系统归属某1个控制器,在创建文件系统的时候,需要对文件系统的归属进行
    的头像 发表于 07-01 14:41 1275次阅读

    基于完整文件系统提取和密钥链解密

    基于直接访问文件系统的无越狱提取方法可用于有限范围的iOS设备。使用内部开发的提取工具,该获取方法将提取剂安装到被获取的设备上。该代理与专家的计算机通信,提供强大的性能和极高的
    的头像 发表于 11-03 09:44 702次阅读

    watchdog:一个能监控文件变化的Python神器

    假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作。 比如说应用到我们之前的音乐高潮提取器:若
    的头像 发表于 10-21 11:22 433次阅读
    watchdog:一个能<b class='flag-5'>监控</b><b class='flag-5'>文件</b>变化的<b class='flag-5'>Python</b>神器

    基于一个能监控文件变化的Python神器

    假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作。 比如说应用到我们之前的音乐高潮提取器:若
    的头像 发表于 11-01 09:52 210次阅读
    基于一个能<b class='flag-5'>监控</b><b class='flag-5'>文件</b>变化的<b class='flag-5'>Python</b>神器