在日常工作和学习中,我们经常会遇到需要合并多个 txt 文档的场景。比如,整理分散在不同文档中的实验数据、汇总多份日志文件、整合多篇文档的内容等。如果手动复制粘贴,不仅效率低下,还容易出现遗漏或错误。而使用 python,只需几行代码,就能快速、准确地完成 txt 文档的合并操作。本文将详细介绍两种常用的 python 合并 txt 文档的方法,无论你是 python 新手还是有一定基础的开发者,都能轻松掌握。
一、为什么选择 python 合并 txt 文档?
在介绍具体方法之前,先聊聊为什么推荐用 python 来做这件事。首先,python 语法简洁易懂,即使是零基础的人,花几分钟就能看懂核心逻辑;其次,python 的标准库中包含了处理文件操作的模块(如os、glob),无需额外安装第三方库,开箱即用;最后,python 的灵活性强,不仅能实现简单的文档合并,还能根据需求添加过滤条件、格式处理等功能,满足多样化的需求。
二、方法一:使用os模块遍历文件夹合并
这种方法适用于需要合并某个文件夹下所有 txt 文档的场景,核心思路是先遍历文件夹找到所有 txt 文件,再逐一读取内容并写入目标文档。
- 核心原理
- os.listdir():列出指定文件夹下的所有文件和子文件夹;
筛选后缀为.txt的文件,排除非 txt 格式的文件;
用with语句打开文件(自动处理文件关闭,避免资源泄漏),先读取每个 txt 文件的内容,再写入到合并后的目标文件中。 - 完整代码
import os
def merge_txt_files(folder_path, output_file):
"""
合并指定文件夹下的所有txt文件到目标文件
:param folder_path: 存放txt文件的文件夹路径
:param output_file: 合并后的目标文件路径(如"merged.txt")
"""
# 打开目标文件,以追加模式(a)写入,编码设为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)
# 读取当前txt文件的内容
with open(file_path, 'r', encoding='utf-8') as in_f:
content = in_f.read()
# 将内容写入目标文件
out_f.write(content)
# 可选:在每个文件内容后添加换行符,避免内容连在一起
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”)
- 操作步骤
准备文件夹:创建一个文件夹(如test_txt),将需要合并的所有 txt 文档放入其中;
修改路径:将代码中的folder_path改为你的 txt 文件夹路径(相对路径或绝对路径均可,绝对路径如"c:/users/xxx/documents/test_txt");
运行代码:执行 python 脚本,合并后的文件会自动生成在指定路径(如merged_all.txt)。 - 代码说明
encoding=‘utf-8’:必须指定编码格式,否则读取或写入中文时可能出现乱码;
‘a’模式(追加模式):如果目标文件已存在,新内容会追加到文件末尾;若需覆盖原有内容,可改为’w’模式(写入模式);
可选的out_f.write(’\n\n’):在每个文件内容后添加两个换行符,让不同文档的内容分隔更清晰,根据需求可删除。
三、方法二:使用glob模块精准匹配文件
- 如果不需要合并文件夹下所有 txt,而是需要按特定规则筛选(如文件名包含 “数据”“2024” 等关键词),推荐使用glob模块。它支持通配符匹配,能更灵活地选择目标文件。
- 核心原理
glob.glob():根据通配符模式匹配文件路径,返回符合条件的文件列表;
支持的通配符:(匹配任意字符)、?(匹配单个字符)、[](匹配指定范围内的字符),例如"test_txt/2024.txt"可匹配test_txt文件夹下所有以 “2024” 开头的 txt 文件。 - 完整代码
import glob
def merge_specific_txt(pattern, output_file):
"""
合并符合通配符模式的txt文件到目标文件
:param pattern: 通配符模式(如"test_txt/2024*.txt")
:param output_file: 合并后的目标文件路径
"""
# 找到所有符合模式的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
# 写入目标文件
with open(output_file, 'w', encoding='utf-8') as out_f:
for file_path in txt_files:
# 获取文件名(用于添加标识,可选)
file_name = file_path.split('\\')[-1] # windows系统用'\\',linux/mac用'/'
# 写入文件名作为标识(方便区分不同文件的内容)
out_f.write(f"=== 开始:{file_name} ===\n")
# 读取并写入文件内容
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())
# 写入结束标识
out_f.write(f"\n=== 结束:{file_name} ===\n\n")
print(f"合并完成!共合并{len(txt_files)}个txt文件,结果保存至:{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"文件夹下所有包含"数据"的txt,输出到"merged_data.txt"
# merge_specific_txt(pattern="test_txt/*数据*.txt", output_file="merged_data.txt")
常见匹配模式示例
通配符模式
匹配结果
- test_txt/.txt
- test_txt下所有 txt 文件(同方法一效果)
- test_txt/2024.txt
- test_txt下以 “2024” 开头的 txt 文件
- test_txt/数据.txt
- test_txt下文件名包含 “数据” 的 txt 文件
- test_txt/?.txt
- test_txt下文件名只有 1 个字符的 txt 文件
优势说明
相比os模块,glob的优势在于精准筛选:当需要按文件名规则合并部分 txt 时,无需手动判断,直接通过通配符即可实现,代码更简洁,扩展性更强。
四、注意事项:避免踩坑的关键细节
路径问题:
相对路径:代码文件与 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()一次性读取全部内容(可能占用过多内存),可改为按行读取:
# 大文件按行读取的写法
with open(file_path, 'r', encoding='utf-8') as in_f:
for line in in_f:
out_f.write(line)
文件覆盖风险:
若目标文件(output_file)已存在,使用’w’模式会直接覆盖原有内容,建议先检查文件是否存在,或用’a’模式追加(需注意是否需要去重)。
五、扩展需求:让合并功能更强大
除了基础的合并功能,我们还可以根据实际需求扩展代码,比如:
按文件修改时间排序合并:
在读取文件前,按文件的修改时间对 txt 文件列表排序,确保合并顺序符合时间逻辑:
# 按修改时间排序(最新修改的文件在后)
txt_files.sort(key=lambda x: os.path.getmtime(x))
去除重复内容:
若多个 txt 文件有重复内容,可通过集合(set)去重(注意:集合会打乱顺序,需根据需求判断是否适用):
# 去重示例(适用于无顺序要求的场景)
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())
# 将去重后的内容写入目标文件
with open(output_file, 'w', encoding='utf-8') as out_f:
out_f.writelines(all_content)
批量处理子文件夹:
若 txt 文件分散在多个子文件夹中,可在glob.glob()中设置recursive=true,并使用**匹配所有子文件夹:
匹配"test_txt"及其所有子文件夹下的txt文件
txt_files = glob.glob(“test_txt/**/*.txt”, recursive=true)
六、总结
python 合并 txt 文档的核心是文件读取与写入,通过os或glob模块实现文件筛选,再结合with语句安全操作文件。两种方法各有优势:
os模块:适合合并指定文件夹下的所有 txt,代码直观;
glob模块:适合按文件名规则筛选 txt,灵活性更高。
无论你是需要快速合并几份文档,还是批量处理成百上千个文件,python 都能帮你节省大量时间。赶紧试试上面的代码,根据自己的需求调整参数,体验高效处理文本的乐趣吧!如果在使用过程中遇到问题,欢迎在评论区留言讨论~
以上就是python轻松合并多个txt文档的实战指南的详细内容,更多关于python合并txt文档的资料请关注代码网其它相关文章!
发表评论