• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Python 比較兩個檔案內容是否相同的各種方法

介紹如何在 Python 使用各種函數判斷兩個檔案是否相同的方法。

os.path.samefile 函數

os.path.samefile 函數可以依據儲存設備的編號與檔案的 inode 編號來判斷兩個檔案路徑是否為同一個檔案:

#!/usr/bin/python3
import os

# 檢查 file1.txt 與 file2.txt 是否相同
if os.path.samefile("file1.txt", "file2.txt"):
    print("檔案相同")
else:
    print("檔案不同")

os.path.samefile 函數會將連結檔(包含硬連結與軟連結)跟原始檔都視為相同的檔案,而如果是透過複製產生的新檔案,縱使檔案內容都一樣,也會被視為不同的檔案。

檔案類型 os.path.samefile 判斷結果
硬連結檔案 相同
軟連結檔案 相同
複製檔案 不同

filecmp.cmp 函數

filecmp.cmp 函數可以依據檔案的類型、大小、修改時間或檔案內容,判斷兩個檔案內容是否相同。

#!/usr/bin/python3
import filecmp

# 檢查 file1.txt 與 file2.txt 是否相同
if filecmp.cmp("file1.txt", "file2.txt"):
    print("檔案相同")
else:
    print("檔案不同")

filecmp.cmp 函數是純粹針對兩個檔案內容進行比較,只要實際的內容相同,則判定為相同。

檔案類型 filecmp.cmp 判斷結果
硬連結檔案 相同
軟連結檔案 相同
複製檔案 相同

MD5 檢查碼

MD5 檢查碼是常用來確認檔案是否一致的方法之一,在 Python 中若要計算檔案的 MD5 檢查碼,可以使用 hashlib.md5 函數:

#!/usr/bin/python3
import hashlib

# 建立 MD5 物件
md5 = hashlib.md5()

# 計算檔案的 MD5 檢查碼
with open("file.txt", "rb") as f:
    for chunk in iter(lambda: f.read(4096), b""):
        md5.update(chunk)

# 取得 MD5 結果
digest = md5.hexdigest()
print(digest)

這裡我們每次從檔案中讀取 4096 位元組的資料進行 MD5 的檢查碼計算,這樣可以避免大型檔案占用過量的記憶體問題。

透過 MD5 檢查碼的比較,即可確認兩個檔案內容是否一致。

SHA1 檢查碼

SHA1 檢查碼是 MD5 檢查碼的替代方案,使用方式幾乎跟 MD5 相同:

#!/usr/bin/python3
import hashlib

# 建立 SHA1 物件
sha1 = hashlib.sha1()

# 計算檔案的 SHA1 檢查碼
with open("file.txt", "rb") as f:
    for chunk in iter(lambda: f.read(4096), b""):
        sha1.update(chunk)

# 取得 SHA1 結果
digest = sha1.hexdigest()
print(digest)

SHA256 檢查碼

MD5 與 SHA1 目前皆由於安全性因素,已經不被大多數的加密場景所接受,而 SHA256 則是目前最常被採用的檢查碼之一:

#!/usr/bin/python3
import hashlib

# 建立 SHA256 物件
sha256 = hashlib.sha256()

# 計算檔案的 SHA256 檢查碼
with open("file.txt", "rb") as f:
    for chunk in iter(lambda: f.read(4096), b""):
        sha256.update(chunk)

# 取得 SHA256 結果
digest = sha256.hexdigest()
print(digest)

參考資料

  • G. T. Wang:Python 計算 MD5 與 SHA 雜湊教學與範例
  • GeeksforGeeks:How to compare two text files in python?
  • StackOverflow:Hashing a file in Python

分類:Python

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide