最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用watchdog模塊監(jiān)控文件變化

 更新時(shí)間:2022年06月30日 09:16:33   作者:Ckend  
這篇文章主要為大家介紹一個(gè)Python中的模塊:watchdog模塊,它可以實(shí)現(xiàn)監(jiān)控文件的變化。文中通過示例詳細(xì)介紹了watchdog模塊的使用,需要的可以參考一下

假設(shè)現(xiàn)在有一個(gè)應(yīng)用場(chǎng)景,需要對(duì)文件系統(tǒng)進(jìn)行監(jiān)控,發(fā)生變化時(shí)產(chǎn)生日志,對(duì)新增的文件做一些相應(yīng)的操作。

比如說應(yīng)用到我們之前的音樂高潮提取器:若當(dāng)前文件夾下增加了一個(gè)音樂文件,監(jiān)控器就調(diào)用音樂高潮提取器,自動(dòng)提取該音樂文件的高潮部分。

這樣的監(jiān)控器寫起來也不難,但是很花時(shí)間,有許多情況要考慮。不過幸好我們是寫Python的,有許多輪子可以使用,本文介紹的就是一個(gè)名為 watchdog 的模塊,它能幫助我們實(shí)現(xiàn)上述功能。

1.準(zhǔn)備

開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。

如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.

Windows環(huán)境下打開Cmd(開始—運(yùn)行—CMD),蘋果系統(tǒng)環(huán)境下請(qǐng)打開Terminal(command+空格輸入Terminal),準(zhǔn)備開始輸入命令安裝依賴。

當(dāng)然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來,在編輯器下方的終端運(yùn)行命令安裝依賴模塊,多舒服的一件事啊

在終端輸入以下命令安裝我們所需要的依賴模塊:

pip?install?watchdog

看到 Successfully installed xxx 則說明安裝成功。

2.基本使用

看門狗的使用并不復(fù)雜,請(qǐng)認(rèn)真看以下代碼和注釋:

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'

    # 生成事件處理器對(duì)象
    event_handler = LoggingEventHandler()

    # 生成監(jiān)控器對(duì)象
    observer = Observer()
    # 注冊(cè)事件處理器,配置監(jiān)控目錄
    observer.schedule(event_handler, path, recursive=True)
    # 監(jiān)控器啟動(dòng)——?jiǎng)?chuàng)建線程
    observer.start()

    # 以下代碼是為了保持主線程運(yùn)行
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    # 主線程任務(wù)結(jié)束之后,進(jìn)入阻塞狀態(tài),一直等待其他的子線程執(zhí)行結(jié)束之后,主線程再終止
    observer.join()

可以看到代碼中有幾個(gè)關(guān)鍵步驟,

1.配置各項(xiàng)信息;

2.生成事件處理器、監(jiān)控器;

3.注冊(cè)事件處理器、配置目錄、遞歸執(zhí)行(即同時(shí)監(jiān)控子文件夾);

4:啟動(dòng)。

其實(shí),看門狗的observer是基于threading.Thread 對(duì)象的,所以observer很多屬性都繼承了 threading.Thread 的屬性。

如果你不帶參數(shù)地運(yùn)行該腳本,就是要監(jiān)控腳本文件所在的文件夾,如果要監(jiān)控其他文件夾,記得運(yùn)行時(shí)帶文件夾的路徑參數(shù),如:

python obserber.py /data/home/ckend/

我們來試著運(yùn)行看看:

可以看到,我在當(dāng)前文件夾下做的所有操作都被記錄下來了。接下來我們就試試怎么自定義一些操作。

3.監(jiān)控文件變化

如果你不知道怎么提取音樂文件的高潮部分,請(qǐng)看這篇文章:《Python自動(dòng)提取音樂文件高潮》。

要實(shí)現(xiàn)這樣的功能,我們有幾種方法,一個(gè)是在原來log的處理器上做一些新增修改,比如多增一個(gè)函數(shù)調(diào)用音樂高潮提取器。第二個(gè)是重新繼承 FileSystemEventHandler 類,并做相應(yīng)的修改。這里我們還是要保留log的樣式,只是在log的時(shí)候順便提取音樂高潮,因此采用第一個(gè)方法。

看看 LoggingEventHandler 源代碼中的 on_created ,這就是當(dāng)文件創(chuàng)建時(shí)監(jiān)控器的操作:

class LoggingEventHandler(FileSystemEventHandler):
    """Logs all the events captured."""
?
    # ...省略其他源代碼...
?
    def on_created(self, event):
        super(LoggingEventHandler, self).on_created(event)
?
        what = 'directory' if event.is_directory else 'file'
        logging.info("Created %s: %s", what, event.src_path)

我們僅需要繼承這個(gè)類并對(duì) on_created 進(jìn)行修改,就能完成我們想要的功能:

# Python實(shí)用寶典
# 2019/12/29

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
from pychorus import find_and_output_chorus


class extractor(LoggingEventHandler):

    def on_created(self, event):
        super(LoggingEventHandler, self).on_created(event)
        what = 'directory' if event.is_directory else 'file'
        logging.info("Created %s: %s", what, event.src_path)
        NameExt = event.src_path.split('.')
        if 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__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'

    # 生成事件處理器對(duì)象
    event_handler = extractor()

    # 生成監(jiān)控器對(duì)象
    observer = Observer()
    # 注冊(cè)事件處理器
    observer.schedule(event_handler, path, recursive=True)
    # 監(jiān)控器啟動(dòng)——?jiǎng)?chuàng)建線程
    observer.start()

    # 以下代碼是為了保持主線程運(yùn)行
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    # 主線程任務(wù)結(jié)束之后,進(jìn)入阻塞狀態(tài),一直等待其他的子線程執(zhí)行結(jié)束之后,主線程再終止
    observer.join() 

首先聲明一個(gè)類,繼承 LoggingEventHandler ,然后重載 on_created 函數(shù),在這個(gè)函數(shù)中不僅記錄文件事件變化,還要對(duì)mp3文件做一次音樂高潮提取。最后別忘了,生成事件處理器時(shí)要用我們新的類名。

看看效果,將小永遠(yuǎn).mp3復(fù)制過來:

成功監(jiān)控文件變化并提取到音樂高潮,生成高潮文件。這樣,只要你保持這個(gè)Python進(jìn)程不關(guān)閉,它就會(huì)一直監(jiān)控這個(gè)文件夾,一旦有音樂文件進(jìn)入,就會(huì)自動(dòng)提取它的音樂高潮,在linux系統(tǒng)下,可以搭配supervisor使用,非常好用。

到此這篇關(guān)于Python利用watchdog模塊監(jiān)控文件變化的文章就介紹到這了,更多相關(guān)Python watchdog模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Keras 利用sklearn的ROC-AUC建立評(píng)價(jià)函數(shù)詳解

    Keras 利用sklearn的ROC-AUC建立評(píng)價(jià)函數(shù)詳解

    這篇文章主要介紹了Keras 利用sklearn的ROC-AUC建立評(píng)價(jià)函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python多線程請(qǐng)求帶參數(shù)的多個(gè)接口問題

    python多線程請(qǐng)求帶參數(shù)的多個(gè)接口問題

    這篇文章主要介紹了python多線程請(qǐng)求帶參數(shù)的多個(gè)接口問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python連接Redis的基本配置方法

    Python連接Redis的基本配置方法

    本文分享了Linux系統(tǒng)下Python連接Redis的基本配置方法,Python連接Redis需要Redis的Python包支持
    2018-09-09
  • 關(guān)于python多重賦值的小問題

    關(guān)于python多重賦值的小問題

    這篇文章主要給大家介紹了關(guān)于python多重賦值的小問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python中常見的KeyError報(bào)錯(cuò)分析

    Python中常見的KeyError報(bào)錯(cuò)分析

    在Python編程中,KeyError是一種非常常見的異常,它通常發(fā)生在嘗試訪問字典中不存在的鍵時(shí),本文將深入探討KeyError的報(bào)錯(cuò)原因、解決辦法,并通過代碼示例來演示如何避免這一錯(cuò)誤,需要的朋友可以參考下
    2024-07-07
  • Python zip函數(shù)打包元素實(shí)例解析

    Python zip函數(shù)打包元素實(shí)例解析

    這篇文章主要介紹了Python zip函數(shù)打包元素實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 手把手教你Windows如何在cmd中切換python版本

    手把手教你Windows如何在cmd中切換python版本

    通常在Windows系統(tǒng)下我們可能安裝了多個(gè)Python版本,那么該如何進(jìn)行版本的切換呢?下面這篇文章主要給大家介紹了關(guān)于Windows如何在cmd中切換python版本的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 基于python實(shí)現(xiàn)KNN分類算法

    基于python實(shí)現(xiàn)KNN分類算法

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)KNN分類算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 教你如何利用Python批量翻譯英文Word文檔并保留格式

    教你如何利用Python批量翻譯英文Word文檔并保留格式

    本文將給大家分享一個(gè)實(shí)用的Python辦公自動(dòng)化腳本 利用Python批量翻譯英文Word文檔并保留格式,最終效果甚至比部分收費(fèi)的軟件還要好!文中有非常詳細(xì)的代碼示例.需要的朋友可以參考下
    2021-05-05
  • 詳解Django-auth-ldap 配置方法

    詳解Django-auth-ldap 配置方法

    Django-auth-ldap是一個(gè)Django身份驗(yàn)證后端,可以針對(duì)LDAP服務(wù)進(jìn)行身份驗(yàn)證。這篇文章主要介紹了詳解Django-auth-ldap 配置方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12

最新評(píng)論

鄄城县| 平度市| 仪征市| 平阴县| 望都县| 张家川| 华容县| 任丘市| 清流县| 府谷县| 仁布县| 马关县| 崇左市| 安远县| 永吉县| 湘阴县| 侯马市| 广汉市| 临江市| 岚皋县| 东源县| 南靖县| 尉犁县| 天长市| 宜丰县| 资阳市| 石柱| 武宣县| 阿克| 华安县| 淮滨县| 聂拉木县| 越西县| 阿拉尔市| 额尔古纳市| 博湖县| 天门市| 城口县| 南陵县| 临夏市| 乌拉特后旗|