Python so sánh các tệp trong các thư mục khác nhau

Cấu trúc thư mục tương tự được lặp lại một lần trong thư mục “common_dir” để đưa ra các tùy chọn so sánh đệ quy thú vị

So sánh tệp

Mô-đun filecmp bao gồm các chức năng và một lớp để so sánh các tệp và thư mục trên hệ thống tệp. Nếu bạn cần so sánh hai tệp, hãy sử dụng hàm cmp[]

import filecmp

print 'common_file:', 
print filecmp.cmp['example/dir1/common_file', 
                  'example/dir2/common_file'],
print filecmp.cmp['example/dir1/common_file', 
                  'example/dir2/common_file',
                  shallow=False]

print 'not_the_same:', 
print filecmp.cmp['example/dir1/not_the_same', 
                  'example/dir2/not_the_same'],
print filecmp.cmp['example/dir1/not_the_same', 
                  'example/dir2/not_the_same',
                  shallow=False]

print 'identical:',
print filecmp.cmp['example/dir1/file_only_in_dir1', 
                  'example/dir1/file_only_in_dir1'],
print filecmp.cmp['example/dir1/file_only_in_dir1', 
                  'example/dir1/file_only_in_dir1',
                  shallow=False]

Theo mặc định, cmp[] chỉ xem thông tin có sẵn từ os. thống kê[]. Đối số nông cho biết cmp[] có xem nội dung của tệp hay không. Mặc định là thực hiện so sánh nông mà không cần nhìn vào bên trong các tệp. Lưu ý rằng các tệp có cùng kích thước được tạo cùng lúc dường như giống nhau nếu nội dung của chúng không được so sánh

$ python filecmp_cmp.py

common_file: True True
not_the_same: True False
identical: True True

Để so sánh một tập hợp các tệp trong hai thư mục mà không cần lặp lại, hãy sử dụng filecmp. cmpfiles[]. Các đối số là tên của các thư mục và danh sách các tệp sẽ được kiểm tra ở hai vị trí. Danh sách các tệp phổ biến chỉ nên chứa tên tệp [các thư mục luôn dẫn đến sự không khớp] và các tệp phải có ở cả hai vị trí. Đoạn mã dưới đây cho thấy một cách đơn giản để xây dựng danh sách chung. Nếu bạn có một công thức ngắn hơn, hãy đăng nó trong phần bình luận. Việc so sánh cũng lấy cờ nông, giống như với cmp[]

import filecmp
import os

# Determine the items that exist in both directories
d1_contents = set[os.listdir['example/dir1']]
d2_contents = set[os.listdir['example/dir2']]
common = list[d1_contents & d2_contents]
common_files = [ f 
                for f in common 
                if os.path.isfile[os.path.join['example/dir1', f]]
                ]
print 'Common files:', common_files

# Compare the directories
match, mismatch, errors = filecmp.cmpfiles['example/dir1', 
                                           'example/dir2', 
                                           common_files]
print 'Match:', match
print 'Mismatch:', mismatch
print 'Errors:', errors

cmpfiles[] trả về ba danh sách tên tệp cho các tệp khớp, tệp không khớp và tệp không thể so sánh được [do sự cố về quyền hoặc vì bất kỳ lý do nào khác]

$ python filecmp_cmpfiles.py

Common files: ['not_the_same', 'file_in_dir1', 'common_file']
Match: ['not_the_same', 'common_file']
Mismatch: ['file_in_dir1']
Errors: []

sử dụng dircmp

Các chức năng được mô tả ở trên phù hợp với các phép so sánh tương đối đơn giản, nhưng để so sánh đệ quy các cây thư mục lớn hoặc để phân tích đầy đủ hơn, lớp dircmp sẽ hữu ích hơn. Trong trường hợp sử dụng đơn giản nhất, bạn có thể in báo cáo so sánh hai thư mục bằng phương thức report[]

import filecmp

filecmp.dircmp['example/dir1', 'example/dir2'].report[]

Đầu ra là một báo cáo văn bản thuần túy hiển thị kết quả của chỉ nội dung của các thư mục đã cho, mà không cần đệ quy. Trong trường hợp này, tệp “not_the_same” được cho là giống nhau vì nội dung không được so sánh. Không có cách nào để dircmp so sánh nội dung của các tệp như cmp[] có thể

$ python filecmp_dircmp_report.py

diff example/dir1 example/dir2
Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1']
Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2']
Identical files : ['common_file', 'not_the_same']
Common subdirectories : ['common_dir']
Common funny cases : ['file_in_dir1']

Để biết thêm chi tiết và so sánh đệ quy, hãy sử dụng report_full_closure[]

import filecmp

filecmp.dircmp['example/dir1', 'example/dir2'].report_full_closure[]

Đầu ra bao gồm các so sánh của tất cả các thư mục con song song

$ python filecmp_dircmp_report_full_closure.py

diff example/dir1 example/dir2
Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1']
Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2']
Identical files : ['common_file', 'not_the_same']
Common subdirectories : ['common_dir']
Common funny cases : ['file_in_dir1']

diff example/dir1/common_dir example/dir2/common_dir
Common subdirectories : ['dir1', 'dir2']

diff example/dir1/common_dir/dir2 example/dir2/common_dir/dir2
Identical files : ['common_file', 'file_only_in_dir2', 'not_the_same']
Common subdirectories : ['common_dir', 'dir_only_in_dir2', 'file_in_dir1']

diff example/dir1/common_dir/dir2/common_dir example/dir2/common_dir/dir2/common_dir

diff example/dir1/common_dir/dir2/dir_only_in_dir2 example/dir2/common_dir/dir2/dir_only_in_dir2

diff example/dir1/common_dir/dir2/file_in_dir1 example/dir2/common_dir/dir2/file_in_dir1

diff example/dir1/common_dir/dir1 example/dir2/common_dir/dir1
Identical files : ['common_file', 'file_in_dir1', 'file_only_in_dir1', 'not_the_same']
Common subdirectories : ['common_dir', 'dir_only_in_dir1']

diff example/dir1/common_dir/dir1/common_dir example/dir2/common_dir/dir1/common_dir

diff example/dir1/common_dir/dir1/dir_only_in_dir1 example/dir2/common_dir/dir1/dir_only_in_dir1

Sử dụng sự khác biệt trong chương trình của bạn

Bên cạnh việc tạo báo cáo in, dircmp tính toán danh sách tệp hữu ích mà bạn có thể sử dụng trực tiếp trong chương trình của mình. Mỗi thuộc tính sau đây chỉ được tính toán khi được yêu cầu, do đó, việc khởi tạo một dircmp không phát sinh thêm nhiều chi phí

Các tệp và thư mục con chứa trong các thư mục được so sánh được liệt kê trong left_list và right_list

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
0

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
1

Các đầu vào có thể được lọc bằng cách chuyển một danh sách các tên cần bỏ qua cho hàm tạo. Theo mặc định, tên RCS, CVS và thẻ bị bỏ qua

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
2

Trong trường hợp này, “common_file” bị loại khỏi danh sách các tệp được so sánh

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
3

Tập hợp các tệp chung cho cả hai thư mục đầu vào được duy trì chung và các tệp duy nhất cho mỗi thư mục được liệt kê trong left_only và right_only

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
4

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
5

Các thành viên chung có thể được chia nhỏ thành các tệp, thư mục và các mục "vui nhộn" [bất kỳ thứ gì có loại khác nhau trong hai thư mục hoặc có lỗi từ os. thống kê[]]

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
6

Trong dữ liệu ví dụ, mục có tên “file_in_dir1” là một tệp trong một thư mục và một thư mục con trong thư mục kia, vì vậy nó hiển thị trong danh sách “vui nhộn”

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
7

Sự khác biệt giữa các tệp được chia nhỏ tương tự

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
8

Hãy nhớ rằng, tập tin “not_the_same” chỉ được so sánh qua os. stat và nội dung không được kiểm tra

$ ls -Rlast example
total 0
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 .
0 drwxr-xr-x  9 dhellmann  dhellmann  306 Apr 20 17:04 ..
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir1
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 dir2

example/dir1:
total 32
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same

example/dir2:
total 24
0 drwxr-xr-x  8 dhellmann  dhellmann  272 Apr 20 17:04 .
0 drwxr-xr-x  4 dhellmann  dhellmann  136 Apr 20 17:04 ..
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 common_dir
8 -rw-r--r--  1 dhellmann  dhellmann   21 Apr 20 17:04 common_file
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 dir_only_in_dir2
0 drwxr-xr-x  2 dhellmann  dhellmann   68 Apr 20 17:04 file_in_dir1
8 -rw-r--r--  1 dhellmann  dhellmann   22 Apr 20 17:04 file_only_in_dir2
8 -rw-r--r--  1 dhellmann  dhellmann   17 Apr 20 17:04 not_the_same
9

Cuối cùng, các thư mục con cũng được ánh xạ tới các đối tượng dircmp mới trong các thư mục con thuộc tính để cho phép so sánh đệ quy dễ dàng

Python phân biệt tệp và thư mục như thế nào?

Một tệp không được chứa tệp/thư mục khác. Một thư mục có thể chứa bất kỳ số lượng tệp/thư mục nào. Tệp có kích thước và mức tiêu thụ bộ nhớ nhất định. Một thư mục không có kích thước riêng .

Làm thế nào bạn có thể so sánh nội dung của hai tập tin khác nhau?

Sử dụng lệnh diff để so sánh các tệp văn bản . Nó có thể so sánh các tệp đơn lẻ hoặc nội dung của các thư mục. Khi lệnh diff được chạy trên các tệp thông thường và khi so sánh các tệp văn bản trong các thư mục khác nhau, lệnh diff cho biết những dòng nào phải được thay đổi trong các tệp để chúng khớp với nhau.

Chủ Đề