回覆列表
-
1 # 編碼之道
-
2 # 山海皆可平z
相同檔案的定義是什麼?
如果是文字檔案,那麼可以用哪個以下方式來判斷。python中提供了很便捷的方法來判斷兩個檔案的內容是否相同,只要兩行程式碼:>>>import filecmp>>>filecmp.cmp(r"e:\1.txt",r"e:\2.txt")如果兩個檔案相同,會輸出True,否則會輸出false。
如果不是文字檔案,那麼可以生成檔案雜湊值來比較。import hashlib
def getHash(f):
line=f.readline()
hash=hashlib.md5()
while(line):
hash.update(line)
line=f.readline()
return hash.hexdigest()
def IsHashEqual(f1,f2):
str1=getHash(f1)
str2=getHash(f2)
return str1==str2
if __name__ == "__main__":
f1=open("D:/2.iso","rb")
f2=open("E:/wenjian/1.iso","rb")
print IsHashEqual(f1,f2)
計算2個檔案的MD5值,大檔案計算較慢
其實這個原理也很簡單,就是以二進位制開啟兩個檔案,逐個位元組的比較兩個檔案對應位置的內容是否相同,如果有任何一個位置的內容不相同,即認為兩個檔案不相同。當然,考慮兩個大小不同的檔案不可能相同,所以在檢查內容之前可以先判斷大小。
好了,原理已經說清楚,下面直接上程式碼:
def is_file_same(file1, file2):with open(file1, "rb") as f1:content1 = f1.read()with open(file2, "rb") as f2:content2 = f2.read()# if two files have different size, they cann"t be same if len(content1) != len(content2):return False else:# if two files have same size, compare the content byte by byte file_len = len(content1)for pos in range(0, file_len):# return False if any byte in same position are different if content1[pos] != content2[pos]:return False # has no different, the two files are same return True
程式碼竟然不給著色和縮排,還是看下圖比較舒服,^_^