文件監(jiān)聽
一、準(zhǔn)備工作
Windows環(huán)境下打開Cmd(開始—運行—CMD),蘋果系統(tǒng)環(huán)境下請打開Terminal(command+空格輸入Terminal),準(zhǔn)備開始輸入命令安裝依賴。
pip install watchdog
二、基本使用
主要分為以下幾個關(guān)鍵步驟:
1.配置各項信息;
2.生成事件處理器、監(jiān)控器;
3.注冊事件處理器、配置目錄、遞歸執(zhí)行(即同時監(jiān)控子文件夾);
4:啟動。
具體實現(xiàn)代碼如下:
#encoding=utf-8
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler
if __name__ == '__main__':
# cmd 輸入 python 腳本地址 監(jiān)聽文件路徑
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 '.'
# 生成事件處理器對象
event_handler = LoggingEventHandler()
# 生成監(jiān)控器對象
observer = Observer()
# 注冊事件處理器,配置監(jiān)控目錄
observer.schedule(event_handler, path, recursive=True)
# 監(jiān)控器啟動-創(chuàng)建線程
observer.start()
# 以下代碼是為了保證主線程運行
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.join()
運行
cmd 輸入:
python F:\PycharmProjects\Pytorch_frame\python\python基礎(chǔ)代碼練習(xí)\文件監(jiān)聽\listen.py e:/test
結(jié)果示意圖如下:

image-20210512143252524
對文件的操作,增加,或者刪除,或者修改,都會有有日志記錄
三、 監(jiān)控文件變化
實現(xiàn)自動提取文件高潮部分
#encoding=utf-8
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 = "test_high.wav"
find_and_output_chorus(event.src_path, output_path, 30)
if __name__ == '__main__':
# cmd 輸入 python 腳本地址 監(jiān)聽文件路徑
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 '.'
# 生成事件處理器對象
# event_handler = LoggingEventHandler()
event_handler = extractor()
# 生成監(jiān)控器對象
observer = Observer()
# 注冊事件處理器,配置監(jiān)控目錄
observer.schedule(event_handler, path, recursive=True)
# 監(jiān)控器啟動-創(chuàng)建線程
observer.start()
# 以下代碼是為了保證主線程運行
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()