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

