Hướng dẫn how do i compare two binary files in python? - làm cách nào để so sánh hai tệp nhị phân trong python?

Trong Python, tôi cần in một khác nhau của hai tệp nhị phân. Tôi đã nhìn vào difflib.Differ mà rất nhiều.

Tuy nhiên, khác nhau giả định các dòng văn bản và do đó, đầu ra không liệt kê chỉ số byte và chênh lệch giá trị hex.

Những gì tôi cần là đầu ra có những gì byte khác nhau, làm thế nào byte khác nhau, các giá trị hex thực tế của hai byte.

Trong Python, làm thế nào để bạn so sánh hai tệp nhị phân (đầu ra: Chỉ số Byte Diff, các giá trị hex của hai byte)?

Tôi đã làm một cái gì đó như:

# /usr/bin/env python2
import difflib
x = open('/path/to/file1', 'r').read()
y = open('/path/to/file2', 'r').read()
print '\n'.join(difflib.Differ().compare(x, y))

Nhưng điều này không xuất ra chỉ số byte nơi sự khác biệt. Và nó không in các giá trị hex.

Mã nguồn: lib/filecmp.py Lib/filecmp.py


Mô-đun filecmp xác định các chức năng để so sánh các tệp và thư mục, với các đánh đổi thời gian/chính xác tùy chọn khác nhau. Để so sánh các tệp, hãy xem thêm mô -đun difflib.

Mô -đun filecmp xác định các chức năng sau:

filecmp.cmp (f1, f2, nông = true) ¶cmp(f1, f2, shallow=True)

So sánh các tệp có tên F1 và F2, trả về True nếu chúng có vẻ bằng, False khác.

Nếu nông là đúng và chữ ký os.stat() (loại tệp, kích thước và thời gian sửa đổi) của cả hai tệp là giống hệt nhau, các tệp được coi là bằng nhau.

Mặt khác, các tệp được coi là khác nhau nếu kích thước hoặc nội dung của chúng khác nhau.

Lưu ý rằng không có chương trình bên ngoài nào được gọi từ chức năng này, mang lại cho nó tính di động và hiệu quả.

Hàm này sử dụng bộ đệm cho các so sánh trong quá khứ và kết quả, với các mục bộ đệm được vô hiệu hóa nếu thông tin os.stat() cho tệp thay đổi. Toàn bộ bộ đệm có thể được xóa bằng

>>> 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) 
0.

filecmp.cmpfiles (dir1, dir2, common, nông = true) ¶cmpfiles(dir1, dir2, common, shallow=True)

So sánh các tệp trong hai thư mục DIR1 và DIR2 có tên được đưa ra bởi Common.

Trả về ba danh sách tên tệp: khớp, không phù hợp, lỗi. Trận đấu chứa danh sách các tệp khớp, không phù hợp chứa tên của các tệp don don và lỗi liệt kê tên của các tệp không thể so sánh. Các tệp được liệt kê trong các lỗi nếu chúng không tồn tại trong một trong các thư mục, người dùng thiếu quyền đọc chúng hoặc nếu không thể so sánh được vì một số lý do khác.

Tham số nông có cùng ý nghĩa và giá trị mặc định như đối với

>>> 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) 
1.

Ví dụ:

>>> 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) 
2 sẽ so sánh
>>> 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) 
3 với
>>> 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) 
4 và
>>> 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) 
5 với
>>> 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) 
6.
>>> 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) 
7 và
>>> 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) 
8 mỗi người sẽ ở trong một trong ba danh sách được trả lại.

filecmp.clear_cache () ¶clear_cache()

Xóa bộ nhớ cache FileCmp. Điều này có thể hữu ích nếu một tệp được so sánh rất nhanh sau khi được sửa đổi đến nỗi nó nằm trong độ phân giải MTIME của hệ thống tập tin cơ bản.

Mới trong phiên bản 3.4.

Lớp >>> 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) 9

classfilecmp.dircmp (a, b, phớt lờ = không, ẩn = không) ¶filecmp.dircmp(a, b, ignore=None, hide=None)

Xây dựng một đối tượng so sánh thư mục mới, để so sánh các thư mục a và b. Bỏ qua là danh sách các tên để bỏ qua và mặc định là difflib.Differ0. Hide là danh sách các tên để ẩn và mặc định là difflib.Differ1.

Lớp

>>> 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) 
9 so sánh các tệp bằng cách thực hiện các so sánh nông như được mô tả cho
>>> 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) 
1.

Lớp

>>> 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) 
9 cung cấp các phương pháp sau:

báo cáo()¶()

In (đến difflib.Differ5) so sánh giữa a và b.

Báo cáo_partial_clurees () ¶()

In một so sánh giữa A và B và các thư mục con ngay lập tức.

Báo cáo_full_cluve () ¶()

In một so sánh giữa A và B và các thư mục con chung (đệ quy).

Lớp

>>> 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) 
9 cung cấp một số thuộc tính thú vị có thể được sử dụng để có được nhiều thông tin khác nhau về các cây thư mục được so sánh.

Lưu ý rằng thông qua các móc difflib.Differ7, tất cả các thuộc tính được tính toán một cách lười biếng, do đó không có hình phạt tốc độ nếu chỉ sử dụng các thuộc tính nhẹ để tính toán được sử dụng.

bên trái¶

Thư mục a.

bên phải¶

Thư mục b.

Left_List¶

Các tệp và thư mục con trong A, được lọc bằng cách ẩn và bỏ qua.

Right_list¶

Các tệp và thư mục con trong B, được lọc bằng cách ẩn và bỏ qua.

phổ thông¶

Các tập tin và thư mục con trong cả a và b.

trái_only¶

Tập tin và thư mục con chỉ trong a.

Right_only¶

Các tập tin và thư mục con chỉ trong b.

Common_dirs¶

Các thư mục con trong cả a và b.

tài liệu thông thường¶

Các tập tin trong cả a và b.

Common_funny¶

Tên trong cả A và B, sao cho loại khác nhau giữa các thư mục hoặc tên mà os.stat() báo cáo lỗi.

Ăn cùng

Các tệp giống hệt nhau trong cả A và B, sử dụng toán tử so sánh tệp lớp.

diff_files¶

Các tệp trong cả A và B, có nội dung khác nhau tùy theo toán tử so sánh tệp lớp.

Funny_Files¶

Các tệp trong cả A và B, nhưng không thể so sánh được.

Subdirs¶

Một tên ánh xạ từ điển trong các trường hợp difflib.Differ9 đến

>>> 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) 
9 (hoặc các trường hợp myDircMP nếu trường hợp này thuộc loại myDircmp, một lớp con là
>>> 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) 
9).

Thay đổi trong phiên bản 3.10: Các mục trước đó luôn là các trường hợp

>>> 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) 
9. Bây giờ các mục là cùng loại với bản thân, nếu bản thân là một lớp con của
>>> 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) 
9.Previously entries were always
>>> 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) 
9 instances. Now entries are the same type as self, if self is a subclass of
>>> 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) 
9.

filecmp.default_ignores¶DEFAULT_IGNORES

Mới trong phiên bản 3.4.

Danh sách các thư mục bị bỏ qua bởi

>>> 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) 
9 theo mặc định.

Dưới đây là một ví dụ đơn giản hóa việc sử dụng thuộc tính filecmp5 để tìm kiếm đệ quy thông qua hai thư mục để hiển thị các tệp khác nhau:

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

Làm cách nào để so sánh hai tệp nhị phân?

Sử dụng lệnh CMP để kiểm tra xem hai tệp có giống nhau byte hay không. Lệnh CMP không liệt kê các khác biệt như lệnh Diff. Tuy nhiên, nó rất tiện lợi cho việc kiểm tra nhanh về việc hai tệp có giống nhau hay không (đặc biệt hữu ích cho các tệp dữ liệu nhị phân).. The command cmp does not list differences like the diff command. However it is handy for a fast check of whether two files are the same or not (especially useful for binary data files).

Làm cách nào để so sánh hai chuỗi nhị phân trong Python?

Thuật toán.Bước 1: Cho hai số.Bước 2: Chuyển đổi cả hai số thành nhị phân của nó bằng hàm bin () và xóa hai ký tự đầu tiên do bin ().Bước 3: Vì biểu diễn nhị phân của cả hai số có thể khác nhau về chiều dài nên chúng tôi sẽ nối các số 0 khi bắt đầu chuỗi ngắn hơn để tạo cả hai chuỗi có độ dài bằng nhau.Convert both number into its binary using bin() function and remove first two characters because of bin(). Step 3 : Since binary representation of both numbers could differ in length so we will append zeroes in start of shorter string to make both string of equal length.

Làm cách nào để so sánh hai tệp trong Python?

Approach..
Mở cả hai tệp ở chế độ đọc ..
Danh sách lưu trữ các chuỗi ..
Bắt đầu so sánh cả hai tệp với phương thức trợ giúp của giao lộ () cho các chuỗi chung ..
So sánh cả hai tệp cho sự khác biệt bằng cách sử dụng trong khi vòng lặp ..
Đóng cả hai tệp ..

Diff có hoạt động cho các tệp nhị phân không?

Diff xác định xem một tệp là văn bản hay nhị phân bằng cách kiểm tra một vài byte đầu tiên trong tệp;Số lượng chính xác của byte phụ thuộc vào hệ thống, nhưng nó thường là vài nghìn.Nếu mọi byte trong phần đó của tệp là không null, thì Diff coi tệp là văn bản;Nếu không, nó coi tệp là nhị phân.If every byte in that part of the file is non-null, diff considers the file to be text; otherwise it considers the file to be binary.