Với python 2.7, mã sau tính toán md5 hexdigest của nội dung của tệp.Sử dụng hashlib để tính toán tiêu chuẩn md5 của tệp trong Python 3
(EDIT: tốt, không thực sự là câu trả lời đã hiển thị, tôi chỉ nghĩ vậy).
import hashlib
def md5sum(filename):
f = open(filename, mode='rb')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf)
return d.hexdigest()
Bây giờ nếu tôi chạy mã mà sử dụng python3 nó nâng cao một ngoại lệ Lỗi Loại:
d.update(buf)
TypeError: object supporting the buffer API required
tôi đã tìm ra rằng tôi có thể làm cho rằng mã chạy với cả python2 và python3 thay đổi nó để:
def md5sum(filename):
f = open(filename, mode='r')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf.encode())
return d.hexdigest()
Bây giờ tôi vẫn tự hỏi tại sao mã gốc ngừng hoạt động. Dường như khi mở một tệp bằng cách sử dụng công cụ sửa đổi chế độ nhị phân, nó trả về các số nguyên thay vì các chuỗi được mã hóa thành các byte (tôi nói rằng vì kiểu (buf) trả về int). Hành vi này có được giải thích ở đâu đó không?
liên quan: http://stackoverflow.com/q/4949162/ – jfs
Sẽ nhanh hơn nếu bạn đọc lớn hơn, gần kích thước khối tệp của hệ thống tệp hơn? (ví dụ 1024 byte trên Linux ext3 và 4096 byte hoặc nhiều hơn trên Windows NTFS) – rakslice