新聞中心
filecmp —- 文件及目錄的比較
源代碼: Lib/filecmp.py

創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號搭建、小程序制作、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!
filecmp 模塊定義了用于比較文件及目錄的函數(shù),并且可以選取多種關(guān)于時(shí)間和準(zhǔn)確性的折衷方案。對于文件的比較,另見 difflib 模塊。
filecmp 模塊定義了如下函數(shù):
filecmp.cmp(f1, f2, shallow=True)
比較名為 f1 和 f2 的文件,如果它們似乎相等則返回 True ,否則返回 False 。
如果 shallow 為真值且兩個(gè)文件的 os.stat() 簽名信息(文件類型、大小和修改時(shí)間)一致,則文件會被視為相同。
在其他情況下,如果文件大小或內(nèi)容不同則它們會被視為不同。
需要注意,沒有外部程序被該函數(shù)調(diào)用,這賦予了該函數(shù)可移植性與效率。
該函數(shù)會緩存過去的比較及其結(jié)果,且在文件的 os.stat() 信息變化后緩存條目失效。所有的緩存可以通過使用 clear_cache() 來清除。
filecmp.cmpfiles(dir1, dir2, common, shallow=True)
比較在兩個(gè)目錄 dir1 和 dir2 中,由 common 所確定名稱的文件。
返回三組文件名列表: match, mismatch, errors 。 match 含有相匹配的文件, mismatch 含有那些不匹配的,然后 errors 列出那些未被比較文件的名稱。如果文件不存在于兩目錄中的任一個(gè),或者用戶缺少讀取它們的權(quán)限,又或者因?yàn)槠渌囊恍┰蚨鵁o法比較,那么這些文件將會被列在 errors 中。
參數(shù) shallow 具有同 filecmp.cmp() 一致的含義與默認(rèn)值。
例如, cmpfiles('a', 'b', ['c', 'd/e']) 將會比較 a/c 與 b/c 以及 a/d/e 與 b/d/e 。 'c' 和 'd/e' 將會各自出現(xiàn)在返回的三個(gè)列表里的某一個(gè)列表中。
filecmp.clear_cache()
清除 filecmp 緩存。如果一個(gè)文件過快地修改,以至于超過底層文件系統(tǒng)記錄修改時(shí)間的精度,那么該函數(shù)可能有助于比較該類文件。
3.4 新版功能.
dircmp 類
class filecmp.dircmp(a, b, ignore=None, hide=None)
創(chuàng)建一個(gè)用于比較目錄 a 和 b 的新的目錄比較對象。 ignore 是需要忽略的文件名列表,且默認(rèn)為 filecmp.DEFAULT_IGNORES 。 hide 是需要隱藏的文件名列表,且默認(rèn)為 [os.curdir, os.pardir] 。
dircmp 類如 filecmp.cmp() 中所描述的那樣對文件進(jìn)行 shallow 比較。
dircmp 類提供以下方法:
-
report()
將 a 與 b 之間的比較結(jié)果打?。ǖ?sys.stdout )。
-
report_partial_closure()
打印 a 與 b 及共同直接子目錄的比較結(jié)果。
-
report_full_closure()
打印 a 與 b 及共同子目錄比較結(jié)果(遞歸地)。
dircmp 類提供了一些有趣的屬性,用以得到關(guān)于參與比較的目錄樹的各種信息。
需要注意,通過 __getattr__() 鉤子,所有的屬性將會惰性求值,因此如果只使用那些計(jì)算簡便的屬性,將不會有速度損失。
-
left
目錄 a 。
-
right
目錄 b 。
-
left_list
經(jīng) hide 和 ignore 過濾,目錄 a 中的文件與子目錄。
-
right_list
經(jīng) hide 和 ignore 過濾,目錄 b 中的文件與子目錄。
-
common
同時(shí)存在于目錄 a 和 b 中的文件和子目錄。
-
left_only
僅在目錄 a 中的文件和子目錄。
-
right_only
僅在目錄 b 中的文件和子目錄。
-
common_dirs
同時(shí)存在于目錄 a 和 b 中的子目錄。
-
common_files
同時(shí)存在于目錄 a 和 b 中的文件。
-
common_funny
在目錄 a 和 b 中類型不同的名字,或者那些 os.stat() 報(bào)告錯(cuò)誤的名字。
-
same_files
在目錄 a 和 b 中,使用類的文件比較操作符判定相等的文件。
-
diff_files
在目錄 a 和 b 中,根據(jù)類的文件比較操作符判定內(nèi)容不等的文件。
-
funny_files
在目錄 a 和 b 中無法比較的文件。
-
subdirs
一個(gè)將 common_dirs 中的名稱映射到 dircmp 實(shí)例(或者 MyDirCmp 實(shí)例,如果該實(shí)例類型為 dircmp 的子類 MyDirCmp 的話)的字典。
在 3.10 版更改: 在之前版本中字典條目總是為 dircmp 實(shí)例。 現(xiàn)在條目將與 self 的類型相同,如果 self 為 dircmp 的子類的話。
filecmp.DEFAULT_IGNORES
3.4 新版功能.
默認(rèn)被 dircmp 忽略的目錄列表。
下面是一個(gè)簡單的例子,使用 subdirs 屬性遞歸搜索兩個(gè)目錄以顯示公共差異文件:
>>> from filecmp import dircmp>>> def print_diff_files(dcmp):... for name in dcmp.diff_files:... print("diff_file %s found in %s and %s" % (name, dcmp.left,... dcmp.right))... for sub_dcmp in dcmp.subdirs.values():... print_diff_files(sub_dcmp)...>>> dcmp = dircmp('dir1', 'dir2')>>> print_diff_files(dcmp)
本文標(biāo)題:創(chuàng)新互聯(lián)Python教程:filecmp—-文件及目錄的比較
文章路徑:http://fisionsoft.com.cn/article/dppeedg.html


咨詢
建站咨詢
