您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么掌握在Python中監控文件系統的技術”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么掌握在Python中監控文件系統的技術”吧!
看門狗watch dog
通過閱讀本文,您將了解如何檢測對Python應用程序中現有文件所做的更改。我們將使用一個維護良好的模塊,叫做看門狗(watchdog)。基于官方文檔,watchdog是一個用于監視文件系統事件的Python API庫和shell實用程序。
它同時支持Python 2.7和3.4+。但是,對于舊版本,建議您使用watchdog < 0.10.0。在本教程中,我將只介紹Python API庫。讓我們繼續下一節,開始安裝必要的模塊。
設置
設置是相當簡單和直接的pip安裝。在繼續之前,強烈建議設置一個虛擬環境。有兩種方法
安裝在PyPI
在終端中運行如下命令。
pip install watchdog
它將安裝PyPI(在撰寫本文時為0.10.2)的最新版本。
從代碼庫安裝
此外,您可以在本地文件夾中克隆存儲庫并正常安裝它。首先,讓我們使用以下命令克隆它。
git clone --recursive git://github.com/gorakhargosh/watchdog.git
使用以下命令更改工作目錄。確保它在工作目錄中包含一個名為setup.py的文件。
cd watchdog
運行以下命令安裝它。
pip install -e.
直接從存儲庫克隆它的一個主要優點是,您可以獲得帶有附加特性的最新版本。
您可以在終端中運行以下命令來驗證安裝是否成功。
pip show watchdog
讓我們繼續下一節并開始編寫Python代碼。
實現
watchdog的主要構建模塊基于以下類:
觀察者
事件處理程序
因此,實現就像這樣簡單:
鴻蒙官方戰略合作共建——HarmonyOS技術社區
創建一個watchdog.observers的實例。觀察者線程類。
使用自己的實現定義事件處理程序的子類,并從中創建實例。
通過附加事件處理程序的觀察者實例調用調度函數。它接受一些其他輸入參數,比如要監視的目錄的路徑。
啟動觀察者線程并等待它生成事件,這些事件將觸發事件處理程序中的代碼。
事件處理程序
當前模塊中有4種類型的事件處理程序可用:
鴻蒙官方戰略合作共建——HarmonyOS技術社區
FileSystemEventHandler—可以覆蓋其中方法的基本文件系統事件處理程序。
PatternMatchingEventHandler——用與正在發生的事件相關的文件路徑匹配給定的模式。
RegexMatchingEventHandler -匹配給定的正則表達式和與發生事件相關的文件路徑。
LoggingEventHandler—記錄捕獲的所有事件。
其余的類繼承自FileSystemEventHandler,它提供了以下函數供我們重寫。
on_any_event -捕獲所有事件處理程序。
on_created -創建文件或目錄時調用。
on_deleted -當文件或目錄被刪除時調用。
on_modified -當文件或目錄被修改時調用。
on_moved -當文件或目錄被移動或重命名時調用。
導入
創建一個新的Python文件,并添加以下導入聲明。我把它命名為test.py。
from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler
FileSystemEventHandler的子類
創建一個繼承自FileSystemEventHandler的新類,并根據用例相應地覆蓋這些函數。我將把它命名為MyHandler,但你可以隨意命名它。
class MyHandler(FileSystemEventHandler): def on_any_event(self, event): print(event.event_type, event.src_path) def on_created(self, event): print("on_created", event.src_path) def on_deleted(self, event): print("on_deleted", event.src_path) def on_modified(self, event): print("on_modified", event.src_path) def on_moved(self, event): print("on_moved", event.src_path)
用實現的邏輯替換print語句。對于每個函數,它都有一個名為event的輸入參數,該參數包含以下變量:
event_type—字符串形式的事件類型。默認為沒有。
is_directory -如果為目錄觸發事件,則為True;否則錯誤。
src_path—觸發此事件的文件系統對象的源路徑。
最有用的參數是src_path,您可以在其中使用它來確定哪個文件被修改,然后再運行相應的邏輯。
if(event.src_path == "./path/file.txt"): print("Execute your logic here!")
觀察者和事件
一旦你創建了子類,你就可以和觀察者類一起安全地創建它的實例了。為監視過程分配您所選擇的路徑。我將檢查一個新創建的名為json的文件夾。您可以根據自己的喜好修改它。
您也可以設置recursive遞歸參數,但強烈建議預先定義層次結構并將其設置為false,以防止權限不足或無法訪問子文件夾的問題。
調用start將運行該線程,當您在相應的路徑中進行修改時,將生成一個事件。
event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path='./json/', recursive=False) observer.start()
測試
為了測試它,你必須實現一個正在運行的循環來防止它退出。退出一個KeyboardInterrupt異常時,調用stop函數來清理資源。
while True: try: pass except KeyboardInterrupt: observer.stop()
保存Python文件并在終端中運行它。根據您設置的名稱修改名稱。
python test.py
您可以通過創建一個新文檔、修改其中的內容并從目錄中刪除它來輕松地測試它。
感謝各位的閱讀,以上就是“怎么掌握在Python中監控文件系統的技術”的內容了,經過本文的學習后,相信大家對怎么掌握在Python中監控文件系統的技術這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。