Computer >> Máy Tính >  >> Lập trình >> Python

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

Thư viện tiêu chuẩn của Python có mô-đun filecmp xác định các hàm để so sánh các tệp và thư mục. So sánh này xem xét các thuộc tính của tệp ngoài dữ liệu trong đó.

Mã mẫu 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 lần đầu tiên được tạo trong 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

Bây giờ chúng ta hãy mô tả các chức năng so sánh khác nhau trong mô-đun filecmp.

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

Hàm này so sánh hai tệp và trả về True nếu chúng giống hệt nhau, nếu không thì là False. Tham số nông là True theo mặc định. Do đó, siêu dữ liệu tệp được xem xét để so sánh ngoài nội dung. Nếu nông được đặt thành Sai, chỉ nội dung được so sánh.

Dựa trên cấu trúc tệp của chúng tôi, mã sau đây tạo ra kết quả như được 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, cạn)

Hàm này so sánh các tệp trong hai thư mục và trả về một bộ ba mục. Mục đầu tiên trong bộ tuple là danh sách các tệp phù hợp, mục thứ hai hiển thị danh sách các tệp chưa khớp và mục thứ ba là danh sách các tệp phổ biến.

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

Mô-đun 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 bên trái và bên phải. Đối tượng có thể thực thi các phương thức khác nhau như được mô tả bên dưới -

filecmp.dircmp (a, b)

Đây là hàm tạo. a và b là các thư mục được so sánh. Theo mặc định, các tệp hệ thống trong thư mục bị ẩn và bị bỏ qua khi so sánh.

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

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

báo cáo ()

Phương pháp này in ra 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']

trái, phải

Các thuộc tính này in tên của thư mục thứ nhất và thứ hai trong hàm tạo dircmp

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

left_list, right_list

Các thuộc tính này trả về danh sách các 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ề các tệp và thư mục chung, chỉ tệp chung và chỉ các thư mục chung.

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

same_file, diff_files

Thuộc tính trả về danh sách các tệp giống hệt nhau và các tệp khác nhau bằng cách sử dụng toán tử so sánh được xác định trong lớp dircmp.

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

Bài viết này thảo luận về lớp dircmp, các phương thức của nó và các chức năng so sánh tệp được xác định trong mô-đun filecmp.