一、背景引入:從“人工整理”到“自動化處理”的轉變
在英語學習過程中,我們經常會接觸各種分組整理的詞匯表,比如“Group1”對應一組單詞及釋義,隨后是“Group2”、“Group3”等等。如果你下載了一個 .txt
格式的四級詞匯表,打算分類整理后導入 Excel 學習軟件中,大概率你會遇到格式雜亂、分組不清、復制麻煩的問題。
這正是我們今天要解決的實際場景:如何用 Python 腳本自動讀取一份分組文本,提取每組單詞及釋義,并導出為結構清晰、按組分類的 Excel 文件?
本文將通過一段簡潔但實用的代碼,為你完整拆解整個處理過程。只需一次點擊,就能讓海量詞匯“格式整齊地排隊”進入 Excel,開啟你的高效學習之旅。
二、思路分析:我們到底要做什么?
整個任務可以分為以下幾個步驟:
- 讀取文本文件:讀取本地
.txt
文件中的原始詞匯數據。 - 按組分割內容:使用正則表達式識別每個 Group 的起始點,并提取組名與內容。
- 提取每行單詞和釋義:針對每組中的每一行,解析出單詞與釋義(考慮
Tab
和空格分隔)。 - 分組保存為 Excel Sheet:每個 Group 單獨作為一個 Excel 的 Sheet 保存,輸出為
.xlsx
文件。 - 打印結果提示:腳本執行完畢后,輸出處理結果路徑。
這不僅是一次對正則表達式和 pandas
的實戰練習,也是一次程序自動化處理文本數據的典型示例。
三、具體功能實現:每一步都不馬虎
1. 讀取文本數據
with open("四級單詞.txt", "r", encoding="utf-8") as file:raw_text = file.read()
這段代碼打開并讀取了名為《四級單詞.txt》的文件內容。注意編碼采用 UTF-8,防止中文亂碼。
2. 利用正則表達式識別 Group 分組
pattern = r"(Group\d+)\n"
splits = re.split(pattern, raw_text)
- 我們設定一個正則:
Group
開頭,后接數字,最后以換行結束。 - 然后用
re.split
分割文本,這樣就能將每組的組名和詞條內容分開。
舉個例子,原文本可能像這樣:
Group1
apple 蘋果
banana 香蕉
Group2
run 跑
jump 跳
經過 re.split
之后,splits
的結果會是:
['', 'Group1', 'apple\t蘋果\nbanana\t香蕉', 'Group2', 'run\t跑\njump\t跳']
3. 將每組單詞提取到字典中
grouped_data = defaultdict(list)
for i in range(1, len(splits), 2):group_name = splits[i]entries = splits[i + 1].strip().split("\n")for entry in entries:...
-
利用 Python 的
defaultdict(list)
自動為每個組建立一個單詞列表。 -
每個詞條處理如下邏輯:
- 優先使用
\t
制表符分隔; - 若沒有
\t
,嘗試用空格分隔; - 去掉無效或空行,確保數據干凈整潔。
- 優先使用
if "\t" in entry:word, meaning = entry.split("\t", 1)
elif " " in entry:parts = entry.split(maxsplit=1)if len(parts) == 2:word, meaning = partselse:continue
這樣處理后,每個分組會變成例如:
'Group1': [('apple', '蘋果'), ('banana', '香蕉')]
4. 寫入 Excel 文件,每組一個 Sheet
with pd.ExcelWriter(output_path) as writer:for group, word_list in grouped_data.items():df = pd.DataFrame(word_list)df.to_excel(writer, sheet_name=group, index=False, header=False)
- 使用
pandas.ExcelWriter
寫入 Excel。 - 每個分組作為一個單獨的 Sheet 頁。
- 不寫入表頭或行號,使數據更加簡潔。
最終生成的文件結構清晰、美觀,每頁都是該組的詞匯,便于記憶與分類學習。
5. 執行結果提示
print(f"轉換完成,已保存為:{output_path}")
一個簡單但貼心的用戶提示,方便確認處理成功與結果文件位置。
四、代碼展示:實用就是最好的美學
完整代碼如下(可直接運行):
import re
import pandas as pd
from collections import defaultdictwith open("四級單詞.txt", "r", encoding="utf-8") as file:raw_text = file.read()pattern = r"(Group\d+)\n"
splits = re.split(pattern, raw_text)
grouped_data = defaultdict(list)for i in range(1, len(splits), 2):group_name = splits[i]entries = splits[i + 1].strip().split("\n")for entry in entries:entry = entry.strip()if not entry:continueif "\t" in entry:word, meaning = entry.split("\t", 1)elif " " in entry:parts = entry.split(maxsplit=1)if len(parts) == 2:word, meaning = partselse:continueelse:continuegrouped_data[group_name].append((word.strip(), meaning.strip()))output_path = "四級單詞.xlsx"
with pd.ExcelWriter(output_path) as writer:for group, word_list in grouped_data.items():df = pd.DataFrame(word_list)df.to_excel(writer, sheet_name=group, index=False, header=False)print(f"轉換完成,已保存為:{output_path}")
五、學后總結:你收獲了什么?
本腳本涵蓋了多個關鍵技能點,值得初中級開發者好好吸收:
- 正則表達式:熟練使用
re.split()
與re.match()
是文本解析的基礎; - 文本清洗:處理不規則數據需要嚴謹的判斷和預處理;
- 數據結構選型:
defaultdict
是處理分組數據的神器; - pandas 應用:將數據寫入 Excel 是最常見的自動化場景之一;
- 代碼可復用性強:換成詞匯表、筆記數據、考試清單都能用!
拓展建議:
- 增加錯誤日志,記錄格式不規范的詞條;
- 支持中文注釋與 Sheet 排序;
- 加入 GUI 界面(如 Tkinter),一鍵操作更直觀。
通過這一小項目,你不僅提升了文本處理能力,還掌握了數據清洗與文件導出的實用技巧。記住,編程的價值在于解決問題,而最能讓你成長的,正是這種“從無到有”的小工具!