• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
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

主要資訊欄

搜尋

近期文章

  • Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤
  • Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例
  • Linux 網路設定 ip 指令用法教學與範例
  • Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例
  • Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例
  • Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例
  • Linux 以 Cryptsetup 與 LUKS 加密磁碟教學與範例
  • Linux 使用 age 簡潔的加密、解密工具使用教學與範例

推薦網站

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

關注本站

  • 電子郵件
  • Facebook

公益

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

Copyright © 2021 · Office Guide