当前位置: 首页 > 后端技术 > Python

Python监控文件的新增、修改、删除等

时间:2023-03-26 01:00:46 Python

现在有一个应用场景,需要监控文件系统,发生变化时产生日志,并对新添加的文件进行一些相应的操作。比如应用到我们之前的climaxextractor:如果当前文件夹下添加了一个音乐文件,monitor会调用climaxextractor来提取音乐文件的高潮部分。这样的监视器不难写,但是需要时间,需要考虑的情况也很多。但幸运的是,我们正在编写Python,并且有很多轮子可供我们使用。1、安装“看门狗”“看门狗”模块是一个Python“轮子”,用于监控文件事件的变化。代码结构优秀,可以注册很多事件处理器,方便用户进行自定义操作。如果你还没有安装Python,请阅读本文《Python详细安装指南》,在终端输入以下命令即可安装watchdog:pipinstallwatchdog2。基本使用看门狗的使用其实并不复杂,请仔细阅读以下代码和注释:.INFO,format='%(asctime)s-%(message)s',datefmt='%Y-%m-%d%H:%M:%S')path=sys.argv[1]iflen(sys.argv)>1其他'.'#生成事件处理器对象event_handler=LoggingEventHandler()#生成监听对象observer=Observer()#注册事件处理器,配置监听目录observer.schedule(event_handler,path,recursive=True)#监听启动-创建线程observer.start()#下面的代码是为了保持主线程运行在主线程终止观察者之前完成执行。join()可以看到代码中有几个关键步骤,1.配置各种信息;2.生成事件处理器和监视器;3、注册事件处理器,配置目录,递归执行(即同时监控子文件夹);4.开始。实际上看门狗的观察者是基于threading.Thread对象的,所以观察者的很多属性都继承了threading.Thread的属性。如果不带参数运行脚本,需要监控脚本文件所在的文件夹。如果要监控其他文件夹,记得带文件夹的path参数运行,比如:pythonobserver.py/data/home/ckend/我们试试运行一下:可以看到我在当前文件夹被记录。接下来,让我们尝试自定义一些操作。3.音乐高潮部分的监控和提取如果你不知道如何提取音乐文件的高潮部分,请看这篇文章:《Python自动提取音乐文件高潮》。要实现这样的功能,我们有几种方法。一是对原有的日志处理器进行一些新的修改,比如增加调用音乐高潮提取器的功能。二是重新继承FileSystemEventHandler类,并进行相应的修改。这里我们还是想保持日志的风格,但是在日志记录的时候顺便把音乐高潮部分提取出来,所以采用第一种方式。看一下LoggingEventHandler源代码中的on_created,这是创建文件时监视器所做的:classLoggingEventHandler(FileSystemEventHandler):"""记录所有捕获的事件。"""#...其他源代码省略。..defon_created(self,event):super(LoggingEventHandler,self).on_created(event)what='directory'ifevent.is_directoryelse'file'logging.info("Created%s:%s",what,event.src_path)我们只需要继承这个类,修改on_created即可完成我们想要的功能:#Python实战宝典#2019/12/29importsysimporttimeimportloggingfromwatchdog.observersimportObserverfromwatchdog.eventsimportLoggingEventHandlerfrompychorusimportfind_and_output_chorusclassextractor(LoggingEventHand):defon_created(self,event):super(LoggingEventHandler,self).on_created(event)what='directory'ifevent.is_directoryelse'file'logging.info("Created%s:%s",what,event.src_path)NameExt=event.src_path.split('.')如果NameExt[-1]=='mp3':logging.info("mp3文件,提取音乐高潮在...")output_path="."+"".join(NameExt[:-1])+'_high.wav'find_and_output_chorus(event.src_path,output_path,30)if__name__=="__main__":记录。basicConfig(level=logging.INFO,format='%(asctime)s-%(message)s',datefmt='%Y-%m-%d%H:%M:%S')path=sys.argv[1]如果len(sys.argv)>1否则'.'#生成事件处理器对象event_handler=extractor()#生成监听对象observer=Observer()#注册事件处理器observer.schedule(event_handler,path,recursive=True)#监听启动-创建线程observer.start()#下面代码就是让主线程保持运行try:whileTrue:time.sleep(1)exceptKeyboardInterrupt:observer.stop()#主线程任务结束后,进入阻塞状态,等待其他子线程的执行finish.主线程终止observer.join()首先声明一个类,继承LoggingEventHandler,然后重载on_created函数,在这个函数中,不仅记录了文件事件变化,还对mp3做了一段音乐高潮提取文件,生成事件处理器的时候不要忘记使用我们新的类名,复制小forever.mp3看看效果:成功监听文件变化,提取音乐高潮,生成Orgasm文件。这是我们文章的结尾。如果你今天想要我们的Python教程,请继续关注我们。如果对您有帮助,请在下方点赞或观看。如果您有任何问题,可以在下方留言区留言。我们会耐心解答!Python实战宝典(pythondict.com)不只是一个合集欢迎关注公众号:Python实战宝典