Python是一種面向?qū)ο蟆⒔忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,具有簡(jiǎn)單易學(xué)、高效可靠、可擴(kuò)展性強(qiáng)等特點(diǎn),受到了廣泛的應(yīng)用和喜愛(ài)。而文件監(jiān)視,則是指對(duì)文件目錄中的文件進(jìn)行監(jiān)聽(tīng),當(dāng)有文件的內(nèi)容發(fā)生變化時(shí),可以自動(dòng)執(zhí)行程序進(jìn)行處理,是一項(xiàng)非常實(shí)用的技術(shù)。Python可以利用其強(qiáng)大的文件和IO操作庫(kù)和框架,很方便地實(shí)現(xiàn)文件監(jiān)視,本文將介紹一下相關(guān)知識(shí)。
import os import time def file_change(path): before = dict([(f, None) for f in os.listdir(path)]) while 1: time.sleep(3) after = dict([(f, None) for f in os.listdir(path)]) added = [f for f in after if f not in before] deleted = [f for f in before if f not in after] if added: print("新增文件: ", ", ".join(added)) if deleted: print("刪除文件: ", ", ".join(deleted)) before = after if __name__=='__main__': path = 'file_path' file_change(path)
上面是一段使用Python實(shí)現(xiàn)的文件監(jiān)視的示例代碼,其實(shí)現(xiàn)的功能是監(jiān)聽(tīng)文件夾中文件的變化,若有文件產(chǎn)生或者被刪除,會(huì)及時(shí)輸出相應(yīng)信息。我們來(lái)看一下代碼的具體實(shí)現(xiàn)。
首先是導(dǎo)入兩個(gè)標(biāo)準(zhǔn)庫(kù),os和time,在實(shí)現(xiàn)文件操作和休眠功能時(shí)會(huì)用到。然后定義了一個(gè)文件變化函數(shù)file_change(path),需要傳入一個(gè)文件夾路徑path參數(shù)。
在函數(shù)中使用了一個(gè)字典before來(lái)存儲(chǔ)目前已存在的文件,然后進(jìn)入一個(gè)while循環(huán),讓程序進(jìn)行循環(huán)監(jiān)聽(tīng)文件夾。文件夾內(nèi)部發(fā)生的變化會(huì)在while循環(huán)中被捕獲,并輸出相應(yīng)信息。程序會(huì)先休眠幾秒鐘,然后再獲取當(dāng)前文件夾中的文件,并且通過(guò)特殊列表推導(dǎo)式生成兩個(gè)新列表,來(lái)實(shí)現(xiàn)文件的比較。若before列表中有而after列表中沒(méi)有,說(shuō)明有文件已經(jīng)被刪除,則將其輸出。反之,若after列表中有而before列表中沒(méi)有,則說(shuō)明有文件新增了,則將其輸出。
最后腳本在main函數(shù)中通過(guò)傳入路徑參數(shù)調(diào)用file_change函數(shù),即可實(shí)現(xiàn)簡(jiǎn)易的文件監(jiān)視功能。