欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用watchdog實(shí)現(xiàn)文件資源監(jiān)控

 更新時(shí)間:2025年01月10日 09:13:16   作者:覓遠(yuǎn)  
watchdog 支持跨平臺(tái)文件資源監(jiān)控,可以檢測(cè)指定文件夾下文件及文件夾變動(dòng),下面我們來(lái)看看Python如何使用watchdog實(shí)現(xiàn)文件資源監(jiān)控吧

Python文件監(jiān)控庫(kù)watchdogs簡(jiǎn)介

隨著Python在各種應(yīng)用領(lǐng)域中的廣泛使用,其生態(tài)環(huán)境也在持續(xù)繁榮,特別是各種第三方庫(kù)的誕生,極大地豐富了開(kāi)發(fā)者的工具箱。在眾多庫(kù)中, watchdog 作為一個(gè)高效的文件系統(tǒng)監(jiān)控庫(kù),對(duì)于實(shí)時(shí)響應(yīng)文件系統(tǒng)的各種事件(如文件創(chuàng)建、修改、刪除等)提供了極大便利。無(wú)論是在需要監(jiān)控項(xiàng)目文件變化以觸發(fā)自動(dòng)化構(gòu)建的開(kāi)發(fā)場(chǎng)景,還是在需要日志記錄、文件備份等運(yùn)維任務(wù)中, watchdog 都能發(fā)揮重要的作用。

文件資源監(jiān)控

安裝:pip install watchdog

watchdog 支持跨平臺(tái)文件資源監(jiān)控,可以檢測(cè)指定文件夾下文件及文件夾變動(dòng),當(dāng)出現(xiàn)不同變動(dòng)(新增、刪除、修改)后,可進(jìn)行相應(yīng)處理。

from time import sleep, strftime
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
 
 
class FileMonitoring(FileSystemEventHandler):
    # event.is_directory 判斷是否是目錄操作
    def on_modified(self, event):  # 文件或文件夾被修改時(shí)觸發(fā)(新增、刪除及修改文件或文件夾都會(huì)被監(jiān)測(cè)為文件夾的修改)
        tm = strftime("%Y-%m-%d %H:%M:%S")
        print(f'{tm} 修改文件夾{event.src_path}')
 
    def on_created(self, event):  # 文件或目錄被創(chuàng)建時(shí)觸發(fā)
        tm = strftime("%Y-%m-%d %H:%M:%S")
        if event.is_directory:
            print(f'{tm} 創(chuàng)建文件夾{event.src_path}')
        else:
            print(f'{tm} 創(chuàng)建文件{event.src_path}')
 
    def on_deleted(self, event):  # 文件或目錄被刪除時(shí)觸發(fā)
        tm = strftime("%Y-%m-%d %H:%M:%S")
        if event.is_directory:
            print(f'{tm} 刪除文件夾{event.src_path}')
        else:
            print(f'{tm} 刪除文件{event.src_path}')
 
    def on_moved(self, event):  # 目錄的創(chuàng)建和刪除操作,被Watchdog視為移動(dòng)操作,因此通過(guò)on_moved方法進(jìn)行捕捉,重命名也可用此捕獲。
        tm = strftime("%Y-%m-%d %H:%M:%S")
        if event.is_directory:
            print(f'{tm} 重命名文件夾:文件夾{event.src_path} 重命名為 {event.dest_path}')
        else:
            print(f'{tm} 重命名文件:文件{event.src_path} 重命名為  {event.dest_path}')
 
 
class MyFileMonitor():
    def __init__(self):
        self.event_handler = FileMonitoring()  # 初始化事件處理器實(shí)例
 
    def sever(self, watched_dir, recursive: bool = True):
        '''
        :param watched_dir: .schedule 方法設(shè)置要監(jiān)控的目錄路徑和事件處理器
        :param recursive: recursive=True 參數(shù)以遞歸地監(jiān)控目錄內(nèi)的所有子目錄
        :return:
        '''
        self.observer = Observer()  # 初始化觀察器
        self.observer.schedule(self.event_handler, watched_dir, recursive=recursive)  # 將事件處理器關(guān)聯(lián)到觀察器
        return self.observer
 
    def run(self, watched_dir, recursive: bool = True):
        '''
        啟動(dòng)觀察器并進(jìn)入無(wú)限循環(huán),直到用戶(hù)按下 Ctrl+C 中斷程序,
        observer.stop() 和 observer.join() 來(lái)正確停止和清理觀察器資源。
        '''
 
        observer = self.sever(watched_dir, recursive)
        observer.start()
        try:
            while True:
                sleep(.1)
        except KeyboardInterrupt:
            observer.stop()
 
        observer.join()

監(jiān)測(cè)文件夾新增、刪除、修改文件夾

在Python中,watchdog 庫(kù)確實(shí)提供了方便的方式來(lái)監(jiān)控文件夾及其內(nèi)部文件的新增、刪除、修改以及重命名等事件。下面是一個(gè)簡(jiǎn)單的示例,展示如何使用 watchdog 來(lái)監(jiān)聽(tīng)一個(gè)文件夾中的這些事件

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
 
# 定義事件處理器類(lèi)
class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(f'File modified: {event.src_path}')
 
    def on_created(self, event):
        print(f'File created: {event.src_path}')
 
    def on_deleted(self, event):
        print(f'File deleted: {event.src_path}')
 
    # 對(duì)于文件夾的創(chuàng)建、刪除操作,請(qǐng)注意:
    # 目錄級(jí)別的事件可通過(guò)on_moved方法捕獲,因?yàn)閯?chuàng)建和刪除目錄也表現(xiàn)為移動(dòng)事件
    def on_moved(self, event):
        if event.is_directory:
            what = "Directory"
        else:
            what = "File"
        print(f'{what} moved: {event.src_path} to {event.dest_path}')
 
# 初始化事件處理器實(shí)例
event_handler = MyHandler()
 
# 指定要監(jiān)控的文件夾路徑
watched_dir = '/path/to/watch'
 
# 初始化觀察器
observer = Observer()
 
# 將事件處理器關(guān)聯(lián)到觀察器
observer.schedule(event_handler, watched_dir, recursive=True)
 
# 啟動(dòng)觀察器
observer.start()
 
print(f'Starting to watch {watched_dir} for file system events...')
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
 
observer.join()

在這個(gè)例子中,MyHandler 類(lèi)繼承了 FileSystemEventHandler 并實(shí)現(xiàn)了幾個(gè)方法來(lái)處理不同的文件系統(tǒng)事件。on_modified 方法會(huì)在文件被修改時(shí)觸發(fā),on_created 在文件或目錄被創(chuàng)建時(shí)觸發(fā),而 on_deleted 在文件或目錄被刪除時(shí)觸發(fā)。對(duì)于目錄的創(chuàng)建和刪除操作,由于Watchdog將它們視為移動(dòng)操作,因此通過(guò) on_moved 方法進(jìn)行捕捉,并檢查 event.is_directory 屬性以區(qū)分是文件還是目錄。

通過(guò) observer.schedule 方法設(shè)置要監(jiān)控的目錄路徑和事件處理器,并設(shè)置 recursive=True 參數(shù)以遞歸地監(jiān)控目錄內(nèi)的所有子目錄。

最后啟動(dòng)觀察器并進(jìn)入無(wú)限循環(huán),直到用戶(hù)按下 Ctrl+C 中斷程序,此時(shí)會(huì)調(diào)用 observer.stop() 和 observer.join() 來(lái)正確停止和清理觀察器資源。

到此這篇關(guān)于python使用watchdog實(shí)現(xiàn)文件資源監(jiān)控的文章就介紹到這了,更多相關(guān)python watchdog文件資源監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中cv2模塊安裝詳細(xì)圖文教程

    python中cv2模塊安裝詳細(xì)圖文教程

    在Python中cv2是OpenCV庫(kù)的一個(gè)模塊,這是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),下面這篇文章主要給大家介紹了關(guān)于python中cv2模塊安裝的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Pandas透視表(pivot_table)詳解

    Pandas透視表(pivot_table)詳解

    這篇文章主要介紹了Pandas透視表(pivot_table)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python 使用elasticsearch 實(shí)現(xiàn)翻頁(yè)的三種方式

    python 使用elasticsearch 實(shí)現(xiàn)翻頁(yè)的三種方式

    這篇文章主要介紹了python 使用elasticsearch 實(shí)現(xiàn)翻頁(yè)的三種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • pytorch實(shí)現(xiàn)線性回歸以及多元回歸

    pytorch實(shí)現(xiàn)線性回歸以及多元回歸

    這篇文章主要為大家詳細(xì)介紹了pytorch實(shí)現(xiàn)線性回歸以及多元回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python的rllib庫(kù)你了解嗎

    python的rllib庫(kù)你了解嗎

    這篇文章主要介紹了python urllib庫(kù)的使用,幫助大家更好的利用python學(xué)習(xí)爬蟲(chóng),感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Python中使用PyExecJS庫(kù)執(zhí)行JavaScript函數(shù)

    Python中使用PyExecJS庫(kù)執(zhí)行JavaScript函數(shù)

    Python在運(yùn)行JavaScript函數(shù)時(shí),需要用到外部庫(kù)來(lái)執(zhí)行JavaScript,本文主要介紹了Python中使用PyExecJS庫(kù)執(zhí)行JavaScript函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • python實(shí)現(xiàn)選取或刪除指定列包含指定內(nèi)容的行

    python實(shí)現(xiàn)選取或刪除指定列包含指定內(nèi)容的行

    這篇文章主要介紹了python實(shí)現(xiàn)選取或刪除指定列包含指定內(nèi)容的行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式

    Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式

    這篇文章主要介紹了Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • pytest進(jìn)階教程之fixture函數(shù)詳解

    pytest進(jìn)階教程之fixture函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于pytest進(jìn)階教程之fixture函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python list語(yǔ)法學(xué)習(xí)(帶例子)

    python list語(yǔ)法學(xué)習(xí)(帶例子)

    python list語(yǔ)法學(xué)習(xí)
    2013-11-11

最新評(píng)論