最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python編寫一個簡單的文本對比工具

 更新時間:2026年05月11日 09:12:14   作者:lcy453  
本文介紹了一個Python編寫的的小工具,用于對比兩份文本文件的差異,該工具可以讀取標準文本和待檢查文本,逐行對比內(nèi)容,并將標注到結(jié)果文件中,希望可以幫助大家解決實際工作中的文本校對問題

在日常工作里,經(jīng)常會遇到這樣的需求:有一份標準文本,還有一份需要檢查的文本,希望快速找出哪里寫錯了、哪里多了、哪里少了。

這個小工具就是為這個場景準備的。它使用 Python 讀取兩份 .txt 文本文件,逐行對比內(nèi)容,并把差異標注到一個新的結(jié)果文件中。

工具文件說明

這個工具文件夾里主要有 4 個文件:

文本對比樣本.txt
需要對比的文本.txt
標注出來的錯誤文本.txt
對比文檔腳本.py

各文件作用如下:

文件名作用
文本對比樣本.txt放標準文本,也就是正確版本
需要對比的文本.txt放需要檢查的文本
標注出來的錯誤文本.txt保存腳本生成的對比結(jié)果
對比文檔腳本.pyPython 腳本,負責讀取、比較、輸出

日常使用時,只需要修改前兩個 .txt 文件,然后運行 Python 腳本即可。

使用方法

先把標準內(nèi)容粘貼到:文本對比樣本.txt

再把需要檢查的內(nèi)容粘貼到:需要對比的文本.txt

保存文件后,在終端進入工具所在文件夾,執(zhí)行:

python3 對比文檔腳本.py

如果是 Windows 電腦,可能需要使用:

py -3 對比文檔腳本.py

或者:

python 對比文檔腳本.py

運行完成后,打開:標注出來的錯誤文本.txt

就能看到生成的對比結(jié)果。

輸出結(jié)果示例

如果某一處文字寫錯了,結(jié)果中會出現(xiàn):

【錯誤:錯字|應為:正確字】

如果多寫了內(nèi)容,會出現(xiàn):

【多余:某些文字】

如果少寫了內(nèi)容,會出現(xiàn):

【缺少:某些文字】

如果兩份文本完全一致,則會顯示:

未發(fā)現(xiàn)差異。

腳本整體思路

這個 Python 腳本的處理流程可以分成 5 步:

  1. 確定默認文件路徑
  2. 讀取標準文本和待檢查文本
  3. 按行拆分兩份文本
  4. 逐行比較差異
  5. 把標注結(jié)果寫入輸出文件

核心邏輯并不復雜,但它用到了幾個很實用的 Python 標準庫。

Python 知識點 1:pathlib處理文件路徑

腳本中使用了:

from pathlib import Path

Path 是 Python 里處理文件路徑的現(xiàn)代寫法,比直接拼接字符串更清晰。

例如:

BASE_DIR = Path(__file__).resolve().parent
DEFAULT_SAMPLE_FILE = BASE_DIR / "文本對比樣本.txt"

這里的意思是:

  • __file__ 表示當前腳本文件
  • resolve() 獲取腳本的完整路徑
  • parent 獲取腳本所在文件夾
  • / 可以用來拼接路徑

這樣寫的好處是:無論用戶從哪里運行腳本,它都能找到腳本同目錄下的文本文件。

Python 知識點 2:讀取和寫入文本文件

讀取文件使用:

path.read_text(encoding="utf-8-sig")

寫入文件使用:

output_file.write_text(report, encoding="utf-8")

這里指定了編碼:

  • utf-8 是常見的通用文本編碼
  • utf-8-sig 可以兼容帶 BOM 的 UTF-8 文件

這對中文文本很重要。如果編碼處理不好,中文可能會亂碼。

Python 知識點 3:異常檢查

腳本中有一個讀取文本的函數(shù):

def read_text(path: Path) -> str:
    if not path.exists():
        raise FileNotFoundError(f"找不到文件:{path}")
    return path.read_text(encoding="utf-8-sig")

這里先判斷文件是否存在:

if not path.exists():

如果文件不存在,就主動拋出錯誤:

raise FileNotFoundError(...)

這樣比靜默失敗更好,因為用戶可以馬上知道是哪個文件缺失。

Python 知識點 4:函數(shù)拆分

腳本沒有把所有代碼都寫在一起,而是拆成了多個函數(shù):

read_text()
split_lines()
mark_line_diff()
compare_texts()
build_report()
parse_args()
main()

這種寫法的好處是:

  • 每個函數(shù)只負責一件事
  • 代碼更容易閱讀
  • 后續(xù)修改更方便
  • 出問題時更容易定位

比如 compare_texts() 只負責比較文本,build_report() 只負責生成報告內(nèi)容。

Python 知識點 5:dataclass保存結(jié)構(gòu)化數(shù)據(jù)

腳本中定義了一個數(shù)據(jù)類:

@dataclass
class LineDiff:
    line_no: int
    sample_line: str
    target_line: str
    marked_target: str
    notes: list[str]

dataclass 適合用來保存一組相關數(shù)據(jù)。

這里每一處差異都包含:

  • 第幾行
  • 標準文本內(nèi)容
  • 待檢查文本內(nèi)容
  • 標注后的內(nèi)容
  • 差異說明

相比用普通字典,dataclass 的字段更清楚,代碼也更容易維護。

Python 知識點 6:difflib比較字符串差異

腳本中最關鍵的比較功能來自 Python 標準庫:

import difflib

核心代碼是:

matcher = difflib.SequenceMatcher(a=sample_line, b=target_line)

SequenceMatcher 可以比較兩個字符串,并告訴我們哪些部分相同、哪些部分不同。

它返回的差異類型主要有:

類型含義
equal兩邊內(nèi)容相同
replace內(nèi)容被替換了
delete目標文本里缺少內(nèi)容
insert目標文本里多出內(nèi)容

腳本根據(jù)這些類型生成不同的標注。

例如:

elif tag == "replace":
    marked_parts.append(f"【錯誤:{actual}|應為:{expected}】")

這表示如果發(fā)現(xiàn)替換錯誤,就把錯誤內(nèi)容和正確內(nèi)容一起寫進結(jié)果文件。

Python 知識點 7:命令行參數(shù)

腳本使用了:

import argparse

argparse 可以讓腳本支持命令行參數(shù)。

比如默認運行:

python3 對比文檔腳本.py

會覆蓋舊結(jié)果。

如果想保留歷史結(jié)果,可以運行:

python3 對比文檔腳本.py --append

這個 --append 參數(shù)就是通過 argparse 實現(xiàn)的。

腳本中對應代碼是:

parser.add_argument(
    "--append",
    action="store_true",
    help="追加到輸出文件末尾;默認覆蓋輸出文件,便于每次粘貼后得到最新結(jié)果",
)

action="store_true" 的意思是:只要用戶寫了 --append,這個值就變成 True

Python 知識點 8:程序入口

腳本最后有這樣一段:

if __name__ == "__main__":
    main()

這是 Python 腳本里非常常見的寫法。

它的意思是:當這個文件被直接運行時,執(zhí)行 main() 函數(shù)。

這樣做的好處是,如果以后這個文件被其他 Python 文件導入,里面的函數(shù)可以被復用,但不會自動執(zhí)行完整流程。

為什么這個腳本不需要安裝額外依賴

這個工具用到的庫包括:

  • argparse
  • difflib
  • dataclasses
  • datetime
  • pathlib

這些都是 Python 自帶的標準庫。

也就是說,只要電腦上安裝了 Python 3,一般就可以運行,不需要再安裝第三方庫。

Windows 用戶需要注意,安裝 Python 時建議勾選:

Add python.exe to PATH

否則可能會出現(xiàn)終端找不到 python 命令的問題。

常見問題

1. 為什么運行后看起來沒反應?

這個腳本不會彈出窗口,它只會在終端輸出提示,并把結(jié)果寫入:

標注出來的錯誤文本.txt

所以運行后需要打開這個文件查看結(jié)果。

2. 為什么 Windows 上python3不能用?

Windows 上常見命令是:

python 對比文檔腳本.py

或者:

py -3 對比文檔腳本.py

python3 在 macOS 和 Linux 上更常見,Windows 上不一定默認支持。

3. 為什么提示找不到文件?

通常是因為幾個 .txt 文件沒有和腳本放在同一個文件夾里。

請確認這些文件都在一起:

文本對比樣本.txt
需要對比的文本.txt
標注出來的錯誤文本.txt
對比文檔腳本.py

4. 為什么結(jié)果看起來對不上?

這個工具是按行比較的。

如果兩份文本的換行位置差很多,結(jié)果可能不夠直觀。

建議把兩份文本按相同段落、相同行粘貼,這樣對比結(jié)果會更清楚。

總結(jié)

這個文本對比工具是一個很適合入門學習的 Python 小項目。

它覆蓋了文件讀寫、路徑處理、字符串比較、命令行參數(shù)、函數(shù)拆分、數(shù)據(jù)類等常見知識點,同時也能解決實際工作中的文本校對問題。

從這個腳本可以看到,Python 不一定要寫得很復雜,使用標準庫就能快速做出實用的小工具。

到此這篇關于基于Python編寫一個簡單的文本對比工具的文章就介紹到這了,更多相關Python文本對比工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Pytorch使用CUDA流(CUDA?stream)的實現(xiàn)

    Pytorch使用CUDA流(CUDA?stream)的實現(xiàn)

    本文主要介紹了Pytorch使用CUDA流(CUDA?stream)的實現(xiàn),CUDA流是在GPU上并行執(zhí)行操作的一種機制,通過使用CUDA流,可以將不同的操作分配給不同的流,在不同的流上并行執(zhí)行這些操作,從而提高代碼的性能
    2023-12-12
  • Python接口自動化淺析Token應用原理

    Python接口自動化淺析Token應用原理

    本文主要介紹token基本概念、運行原理及在自動化中接口如何攜帶token進行訪問,附含源碼,內(nèi)容非常詳細易理解,有需要的朋友可以參考下
    2021-08-08
  • python數(shù)據(jù)歸一化及三種方法詳解

    python數(shù)據(jù)歸一化及三種方法詳解

    這篇文章主要介紹了python數(shù)據(jù)歸一化及三種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python求兩個時間的時間差(實例代碼)

    python求兩個時間的時間差(實例代碼)

    我們在用python進行分析的時候,可能會碰到計算兩個日期的時間差。下面為大家介紹一下如何計算兩個時間的時間差,需要的朋友可以參考下
    2022-11-11
  • 如何在Anaconda中打開python自帶idle

    如何在Anaconda中打開python自帶idle

    這篇文章主要介紹了如何在Anaconda中打開python自帶idle,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • python入門while循環(huán)語句理解學習

    python入門while循環(huán)語句理解學習

    這篇文章主要介紹了python入門while循環(huán)語句理解學習,文中附含詳細圖文示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 最新評論

    浪卡子县| 岚皋县| 吉木乃县| 屏边| 泰兴市| 玉屏| 浦江县| 上高县| 景洪市| 孝义市| 昌图县| 原平市| 称多县| 广西| 河东区| 苏尼特左旗| 山东| 荃湾区| 塘沽区| 申扎县| 元谋县| 随州市| 鹤岗市| 台中县| 资阳市| 望江县| 忻州市| 八宿县| 上蔡县| 武安市| 遂宁市| 杭锦旗| 甘洛县| 云梦县| 滦南县| 常宁市| 湾仔区| 启东市| 中山市| 朝阳区| 汝南县|