Python輕松合并多個TXT文檔的實(shí)戰(zhàn)指南
在日常工作和學(xué)習(xí)中,我們經(jīng)常會遇到需要合并多個 TXT 文檔的場景。比如,整理分散在不同文檔中的實(shí)驗(yàn)數(shù)據(jù)、匯總多份日志文件、整合多篇文檔的內(nèi)容等。如果手動復(fù)制粘貼,不僅效率低下,還容易出現(xiàn)遺漏或錯誤。而使用 Python,只需幾行代碼,就能快速、準(zhǔn)確地完成 TXT 文檔的合并操作。本文將詳細(xì)介紹兩種常用的 Python 合并 TXT 文檔的方法,無論你是 Python 新手還是有一定基礎(chǔ)的開發(fā)者,都能輕松掌握。
一、為什么選擇 Python 合并 TXT 文檔?
在介紹具體方法之前,先聊聊為什么推薦用 Python 來做這件事。首先,Python 語法簡潔易懂,即使是零基礎(chǔ)的人,花幾分鐘就能看懂核心邏輯;其次,Python 的標(biāo)準(zhǔn)庫中包含了處理文件操作的模塊(如os、glob),無需額外安裝第三方庫,開箱即用;最后,Python 的靈活性強(qiáng),不僅能實(shí)現(xiàn)簡單的文檔合并,還能根據(jù)需求添加過濾條件、格式處理等功能,滿足多樣化的需求。
二、方法一:使用os模塊遍歷文件夾合并
這種方法適用于需要合并某個文件夾下所有 TXT 文檔的場景,核心思路是先遍歷文件夾找到所有 TXT 文件,再逐一讀取內(nèi)容并寫入目標(biāo)文檔。
- 核心原理
- os.listdir():列出指定文件夾下的所有文件和子文件夾;
篩選后綴為.txt的文件,排除非 TXT 格式的文件;
用with語句打開文件(自動處理文件關(guān)閉,避免資源泄漏),先讀取每個 TXT 文件的內(nèi)容,再寫入到合并后的目標(biāo)文件中。 - 完整代碼
import os
def merge_txt_files(folder_path, output_file):
"""
合并指定文件夾下的所有TXT文件到目標(biāo)文件
:param folder_path: 存放TXT文件的文件夾路徑
:param output_file: 合并后的目標(biāo)文件路徑(如"merged.txt")
"""
# 打開目標(biāo)文件,以追加模式(a)寫入,編碼設(shè)為utf-8避免中文亂碼
with open(output_file, 'a', encoding='utf-8') as out_f:
# 遍歷文件夾下的所有文件
for file_name in os.listdir(folder_path):
# 篩選出后綴為.txt的文件
if file_name.endswith('.txt'www.toLu120.com m.toLu120.com zuqiu.toLu120.com web.toLu120.com gov.a.toLu120.com):
# 拼接完整的文件路徑
file_path = os.path.join(folder_path, file_name)
# 讀取當(dāng)前TXT文件的內(nèi)容
with open(file_path, 'r', encoding='utf-8') as in_f:
content = in_f.read()
# 將內(nèi)容寫入目標(biāo)文件
out_f.write(content)
# 可選:在每個文件內(nèi)容后添加換行符,避免內(nèi)容連在一起
out_f.write('\n\n')
print(f"合并完成!合并后的文件已保存至:{output_file}")
示例:合并"test_txt"文件夾下的所有TXT,輸出到"merged_all.txt"
merge_txt_files(folder_path=“test_txt”, output_file=“merged_all.txt”)
- 操作步驟
準(zhǔn)備文件夾:創(chuàng)建一個文件夾(如test_txt),將需要合并的所有 TXT 文檔放入其中;
修改路徑:將代碼中的folder_path改為你的 TXT 文件夾路徑(相對路徑或絕對路徑均可,絕對路徑如"C:/Users/xxx/Documents/test_txt");
運(yùn)行代碼:執(zhí)行 Python 腳本,合并后的文件會自動生成在指定路徑(如merged_all.txt)。 - 代碼說明
encoding=‘utf-8’:必須指定編碼格式,否則讀取或?qū)懭胫形臅r可能出現(xiàn)亂碼;
‘a’模式(追加模式):如果目標(biāo)文件已存在,新內(nèi)容會追加到文件末尾;若需覆蓋原有內(nèi)容,可改為’w’模式(寫入模式);
可選的out_f.write(’\n\n’):在每個文件內(nèi)容后添加兩個換行符,讓不同文檔的內(nèi)容分隔更清晰,根據(jù)需求可刪除。
三、方法二:使用glob模塊精準(zhǔn)匹配文件
- 如果不需要合并文件夾下所有 TXT,而是需要按特定規(guī)則篩選(如文件名包含 “數(shù)據(jù)”“2024” 等關(guān)鍵詞),推薦使用glob模塊。它支持通配符匹配,能更靈活地選擇目標(biāo)文件。
- 核心原理
glob.glob():根據(jù)通配符模式匹配文件路徑,返回符合條件的文件列表;
支持的通配符:(匹配任意字符)、?(匹配單個字符)、[](匹配指定范圍內(nèi)的字符),例如"test_txt/2024.txt"可匹配test_txt文件夾下所有以 “2024” 開頭的 TXT 文件。 - 完整代碼
import glob
def merge_specific_txt(pattern, output_file):
"""
合并符合通配符模式的TXT文件到目標(biāo)文件
:param pattern: 通配符模式(如"test_txt/2024*.txt")
:param output_file: 合并后的目標(biāo)文件路徑
"""
# 找到所有符合模式的TXT文件
txt_files = glob.glob(zhibo.kaojiaxiao.com zb.kaojiaxiao.com tsl.kaojiaxiao.com tv.kaojiaxiao.com pattern, recursive=False)
if not txt_files:
print("未找到符合條件的TXT文件,請檢查路徑和模式是否正確!")
return
# 寫入目標(biāo)文件
with open(output_file, 'w', encoding='utf-8') as out_f:
for file_path in txt_files:
# 獲取文件名(用于添加標(biāo)識,可選)
file_name = file_path.split('\\')[-1] # Windows系統(tǒng)用'\\',Linux/Mac用'/'
# 寫入文件名作為標(biāo)識(方便區(qū)分不同文件的內(nèi)容)
out_f.write(f"=== 開始:{file_name} ===\n")
# 讀取并寫入文件內(nèi)容
with open(share.kaojiaxiao.com fxfdj.com www.fxfdj.com m.fxfdj.com wap.fxfdj.comfile_path, 'r', encoding='utf-8') as in_f:
out_f.write(in_f.read())
# 寫入結(jié)束標(biāo)識
out_f.write(f"\n=== 結(jié)束:{file_name} ===\n\n")
print(f"合并完成!共合并{len(txt_files)}個TXT文件,結(jié)果保存至:{output_file}")
示例1:合并"test_txt"文件夾下所有以"2024"開頭的TXT,輸出到"merged_2024.txt"
merge_specific_txt(pattern="test_txt/2024*.txt", output_file="merged_2024.txt")
示例2:合并"test_txt"文件夾下所有包含"數(shù)據(jù)"的TXT,輸出到"merged_data.txt"
# merge_specific_txt(pattern="test_txt/*數(shù)據(jù)*.txt", output_file="merged_data.txt")
常見匹配模式示例
通配符模式
匹配結(jié)果
- test_txt/.txt
- test_txt下所有 TXT 文件(同方法一效果)
- test_txt/2024.txt
- test_txt下以 “2024” 開頭的 TXT 文件
- test_txt/數(shù)據(jù).txt
- test_txt下文件名包含 “數(shù)據(jù)” 的 TXT 文件
- test_txt/?.txt
- test_txt下文件名只有 1 個字符的 TXT 文件
優(yōu)勢說明
相比os模塊,glob的優(yōu)勢在于精準(zhǔn)篩選:當(dāng)需要按文件名規(guī)則合并部分 TXT 時,無需手動判斷,直接通過通配符即可實(shí)現(xiàn),代碼更簡潔,擴(kuò)展性更強(qiáng)。
四、注意事項:避免踩坑的關(guān)鍵細(xì)節(jié)
路徑問題:
相對路徑:代碼文件與 TXT 文件夾在同一目錄時,直接寫文件夾名(如"test_txt")即可;
絕對路徑:若不在同一目錄,需寫完整路徑(Windows 用"C:/a/b",Linux/Mac 用"/home/a/b"),注意 Windows 路徑中的反斜杠需寫為\或用原始字符串(如r"C:\a\b")。
編碼一致性:
確保所有待合并的 TXT 文件編碼格式一致(如均為utf-8或gbk),若部分文件是gbk編碼,需將代碼中的encoding='utf-8’改為encoding=‘gbk’,否則會報錯 “UnicodeDecodeError”。
大文件處理:
若待合并的 TXT 文件較大(如超過 1GB),不建議用read()一次性讀取全部內(nèi)容(可能占用過多內(nèi)存),可改為按行讀?。?/p>
# 大文件按行讀取的寫法
with open(file_path, 'r', encoding='utf-8') as in_f:
for line in in_f:
out_f.write(line)
文件覆蓋風(fēng)險:
若目標(biāo)文件(output_file)已存在,使用’w’模式會直接覆蓋原有內(nèi)容,建議先檢查文件是否存在,或用’a’模式追加(需注意是否需要去重)。
五、擴(kuò)展需求:讓合并功能更強(qiáng)大
除了基礎(chǔ)的合并功能,我們還可以根據(jù)實(shí)際需求擴(kuò)展代碼,比如:
按文件修改時間排序合并:
在讀取文件前,按文件的修改時間對 TXT 文件列表排序,確保合并順序符合時間邏輯:
# 按修改時間排序(最新修改的文件在后)
txt_files.sort(key=lambda x: os.path.getmtime(x))
去除重復(fù)內(nèi)容:
若多個 TXT 文件有重復(fù)內(nèi)容,可通過集合(set)去重(注意:集合會打亂順序,需根據(jù)需求判斷是否適用):
# 去重示例(適用于無順序要求的場景)
all_content = set()
for file_path in txt_files:
with open( vip.fxfdj.com zhibo.fxfdj.com zb.fxfdj.com tsl.fxfdj.com tv.fxfdj.com share.fxfdj.com toLu120.com file_path, 'r', encoding='utf-8') as in_f:
all_content.update(in_f.readlines())
# 將去重后的內(nèi)容寫入目標(biāo)文件
with open(output_file, 'w', encoding='utf-8') as out_f:
out_f.writelines(all_content)
批量處理子文件夾:
若 TXT 文件分散在多個子文件夾中,可在glob.glob()中設(shè)置recursive=True,并使用**匹配所有子文件夾:
匹配"test_txt"及其所有子文件夾下的TXT文件
txt_files = glob.glob(“test_txt/**/*.txt”, recursive=True)
六、總結(jié)
Python 合并 TXT 文檔的核心是文件讀取與寫入,通過os或glob模塊實(shí)現(xiàn)文件篩選,再結(jié)合with語句安全操作文件。兩種方法各有優(yōu)勢:
os模塊:適合合并指定文件夾下的所有 TXT,代碼直觀;
glob模塊:適合按文件名規(guī)則篩選 TXT,靈活性更高。
無論你是需要快速合并幾份文檔,還是批量處理成百上千個文件,Python 都能幫你節(jié)省大量時間。趕緊試試上面的代碼,根據(jù)自己的需求調(diào)整參數(shù),體驗(yàn)高效處理文本的樂趣吧!如果在使用過程中遇到問題,歡迎在評論區(qū)留言討論~
以上就是Python輕松合并多個TXT文檔的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Python合并TXT文檔的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python 使用cycle構(gòu)造無限循環(huán)迭代器
這篇文章主要介紹了python 使用cycle構(gòu)造無限循環(huán)迭代器的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12
python處理xls文件openpyxl基礎(chǔ)操作
這篇文章主要為大家介紹了python處理xls文件openpyxl基礎(chǔ)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Python3爬蟲中識別圖形驗(yàn)證碼的實(shí)例講解
在本篇內(nèi)容里小編給大家分享的是關(guān)于Python3爬蟲中識別圖形驗(yàn)證碼的實(shí)例講解內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。2020-07-07
python機(jī)器學(xué)習(xí)Logistic回歸原理推導(dǎo)
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)Logistic回歸原理推導(dǎo),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

