Python標準庫(3)—filecmp

filecmp模塊用來比較目錄、文件是否相同丧荐。舉例如下:

構建兩個文件夾,其結構如圖所示:

1620807955400.jpg

其中data內(nèi)容保持一致喧枷,data1內(nèi)容不一致虹统,data2是tmp獨有弓坞,readme1和readme內(nèi)容一致。

如果單純比較兩個文件是否相同车荔,可以通過filecmp.cmp(f1, f2, shallow=True)實現(xiàn)渡冻。其中f1、f2是文件名忧便,shallow=True族吻,則通過文件的元信息比較是否一致,如果是False茬腿,則比較兩個文件內(nèi)容呼奢。

import filecmp
from pathlib import Path


def main():
    filecmp.clear_cache() # 清除 filecmp 緩存
    p = Path(".")
    p1 = p / 'tmp' / 'data'
    p2 = p / 'tmp' / 'data1'
    print(filecmp.cmp(p1, p2))


if __name__ == '__main__':
    main()

如果非遞歸比較兩個目錄中的一組文件,可以選擇通過filecmp.cmpfiles(dir1, dir2, common, shallow=True)實現(xiàn)切平。其中dir1握础、dir2是兩個文件夾,common是list悴品,里面是需要比較的共同文件名稱禀综。

import filecmp
from pathlib import Path


def main():
    filecmp.clear_cache()  # 清除 filecmp 緩存
    p = Path(".")
    p3 = p / 'tmp'
    p4 = p / 'tmp1'
    match, mismatch, error = filecmp.cmpfiles(p3, p4, common=['data', 'data1', 'data2'])
    print(match, mismatch, error)


if __name__ == '__main__':
    main()

對于大目錄樹的遞歸比較或者更完整的分析,可以選擇使用dircmp類苔严。

  • report() 打印兩個目錄報告定枷,非遞歸

  • report_full_closure() 遞歸打印兩個目錄

  • 當然也可以通過更低級的API去實現(xiàn),參見dir_files_diff()

import filecmp
from filecmp import dircmp
from pathlib import Path


def dir_files_diff(dcmp: dircmp):
    for name in dcmp.common_files:
        print("the same file found in two dirs: %s" % name)
    for name in dcmp.diff_files:
        print("diff file found in two dirs: %s" % name)
    for name_left in dcmp.left_only:
        print("only found in left dir: %s/%s" % (dcmp.left, name_left))
    for name_right in dcmp.right_only:
        print("only found in right dir: %s/%s" % (dcmp.right, name_right))
    for sub_dcmp in dcmp.subdirs.values():
        dir_files_diff(sub_dcmp)


def main():
    filecmp.clear_cache()  # 清除 filecmp 緩存
    p = Path(".")
  
    dcmp = dircmp(p3, p4)
    dcmp.report()  # 只包括給定目錄的內(nèi)容的報告
    dcmp.report_full_closure()  # 遞歸比較后的報告
    dir_files_diff(dcmp)  # 自定義比較


if __name__ == '__main__':
    main()

整體效果:


1620811764838.jpg
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末届氢,一起剝皮案震驚了整個濱河市欠窒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌退子,老刑警劉巖岖妄,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寂祥,居然都是意外死亡荐虐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門丸凭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來福扬,“玉大人,你說我怎么就攤上這事惜犀☆醣” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵虽界,是天一觀的道長亚茬。 經(jīng)常有香客問我,道長浓恳,這世上最難降的妖魔是什么刹缝? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任碗暗,我火速辦了婚禮,結果婚禮上梢夯,老公的妹妹穿的比我還像新娘言疗。我一直安慰自己,他們只是感情好颂砸,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布噪奄。 她就那樣靜靜地躺著,像睡著了一般人乓。 火紅的嫁衣襯著肌膚如雪勤篮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天色罚,我揣著相機與錄音碰缔,去河邊找鬼。 笑死戳护,一個胖子當著我的面吹牛金抡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腌且,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼梗肝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铺董?” 一聲冷哼從身側響起巫击,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精续,沒想到半個月后坝锰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黔酥,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡媒殉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年闪唆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堪夭。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拣凹,靈堂內(nèi)的尸體忽然破棺而出森爽,到底是詐尸還是另有隱情,我是刑警寧澤嚣镜,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布爬迟,位于F島的核電站,受9級特大地震影響菊匿,放射性物質(zhì)發(fā)生泄漏付呕。R本人自食惡果不足惜计福,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望徽职。 院中可真熱鬧象颖,春花似錦、人聲如沸姆钉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽潮瓶。三九已至陶冷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毯辅,已是汗流浹背埂伦。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悉罕,地道東北人赤屋。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像壁袄,于是被迫代替她去往敵國和親类早。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容