Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

So sánh tệp và thư mục trong Python

Thư viện chuẩn của Python có module filecmp định nghĩa các hàm để so sánh tệp và thư mục. So sánh này lấy vào考慮属性 của tệp ngoài dữ liệu trong chúng.

Các mã ví dụ trong bài viết này sử dụng cấu trúc tệp và thư mục sau:

Hai thư mục dir1 và dir2 trước tiên được tạo dưới thư mục làm việc hiện tại. Chúng chứa các tệp sau:

--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

Hãy mô tả các hàm so sánh khác nhau trong module filecmp.

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

Hàm này so sánh hai tệp và trả về True nếu chúng giống hệt nhau, False ngược lại. Tham số shallow mặc định là True. Do đó si dữ liệu của tệp được考慮 cho so sánh ngoài nội dung. Nếu shallow được đặt thành False, chỉ nội dung được so sánh.

Dựa trên cấu trúc tệp của chúng ta, mã sau cho ra kết quả như hiển thị:

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)

Hàm này so sánh các tệp trong hai thư mục và trả về một tuple ba mục. Mục đầu tiên trong tuple là danh sách tệp khớp, mục thứ hai hiển thị danh sách tệp không khớp, và mục thứ ba là danh sách tệp chung.

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

Module filecmp cũng định nghĩa lớp dircmp. Đối tượng của nó là đối tượng so sánh thư mục. Nó so sánh các tệp trong hai thư mục, được xác định là thư mục left và right. Đối tượng có thể thực thi các phương thức khác nhau như được mô tả dưới đây:

filecmp.dircmp(a, b)

Đây là constructor. a và b là các thư mục cần so sánh. Mặc định các tệp hệ thống trong thư mục bị ẩn và bị bỏ qua trong so sánh.

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

Các phương thức khác trong lớp dircmp như sau:

report()

Phương thức này in kết quả so sánh giữa các thư mục.

>>> 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

Các thuộc tính này in tên của thư mục đầu tiên và thứ hai trong constructor dircmp.

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

left_list, right_list

Các thuộc tính này trả về danh sách tệp trong cả hai thư mục.

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

common, common_files, common_dirs

Các thuộc tính này trả về tệp và thư mục chung, chỉ tệp chung và chỉ thư mục chung.

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

same_files, diff_files

Các thuộc tính trả về danh sách tệp giống nhau và tệp khác nhau sử dụng toán tử so sánh được định nghĩa trong lớp dircmp.

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

Bài viết này thảo luận lớp dircmp, các phương thức của nó và các hàm so sánh tệp được định nghĩa trong module filecmp.