Python中的檔案和目錄比較


Python 的標準庫包含 filecmp 模組,該模組定義了用於比較檔案和目錄的函式。此比較除了考慮檔案中的資料外,還考慮檔案的屬性。

本文中的示例程式碼使用以下檔案和目錄結構。

首先在當前工作目錄下建立兩個目錄 dir1 和 dir2。它們包含以下檔案。

--dir1/newfile.txt--
This is a file in dir1
--dir1/file1.txt--
Hello Python
--dir1/file2.txt--
Python Standard Library
--dir2/file1.txt--
Hello Python
--dir2/file2.txt--
Python Library

現在讓我們描述 filecmp 模組中的各種比較函式。

filecmp.cmp(f1, f2, shallow=True)

此函式比較兩個檔案,如果它們相同則返回 True,否則返回 False。shallow 引數預設為 True。因此,除了內容外,還考慮檔案元資料進行比較。如果將 shallow 設定為 False,則僅比較內容。

根據我們的檔案結構,以下程式碼產生如下所示的輸出:

Differing files : ['file2.txt']
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt')
True
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt', shallow = False)
True
>>> filecmp.cmp('dir1/file2.txt', 'dir2/file2.txt')
False

filecmp.cmpfiles(dir1, dir2, shallow)

此函式比較兩個目錄中的檔案,並返回一個包含三個專案的元組。元組中的第一個專案是匹配檔案的列表,第二個專案顯示不匹配檔案的列表,第三個專案是不匹配檔案的列表。

>>> match, mismatch,errors = filecmp.cmpfiles('dir1','dir2',['file1.txt', 'file2.txt'])
>>> match
['file1.txt']
>>> mismatch
['file2.txt']
>>> errors
[]

filecmp 模組還定義了 dircmp 類。它的物件是目錄比較物件。它比較兩個目錄(標識為左目錄和右目錄)中的檔案。該物件可以執行如下所述的各種方法:

filecmp.dircmp(a,b)

這是建構函式。a 和 b 是要比較的目錄。預設情況下,目錄中的系統檔案在比較中被隱藏並忽略。

>>> result = filecmp.dircmp('dir1', 'dir2')

dircmp 類中的其他方法如下:

report()

此方法列印目錄之間比較的結果。

>>> result = filecmp.dircmp('dir1', 'dir2')
>>> result.report()
diff dir1 dir2
Only in dir1 : ['newfile.txt']
Identical files : ['file1.txt']
Differing files : ['file2.txt']

left, right

這些屬性列印 dircmp 建構函式中第一個和第二個目錄的名稱。

>>> result.left
'dir1'
>>> result.right
'dir2'

left_list, right_list

這些屬性返回兩個目錄中的檔案列表。

>>> result.left_list
['file1.txt', 'file2.txt', 'newfile.txt']
>>> result.right_list
['file1.txt', 'file2.txt']

common, common_files, common_dirs

這些屬性返回公共檔案和目錄、僅公共檔案和僅公共目錄。

>>> result.common
['file1.txt', 'file2.txt']
>>> result.common_files
['file1.txt', 'file2.txt']
>>> result.common_dirs
[]

same_file, diff_files

這些屬性使用在 dircmp 類中定義的比較運算子返回相同檔案和不同檔案的列表。

>>> result.same_files
['file1.txt']
>>> result.diff_files
['file2.txt']

本文討論了 dircmp 類、其方法以及在 filecmp 模組中定義的檔案比較函式。

更新於:2020年6月25日

5K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.