编程与 AI12 分钟阅读更新于 2026-07-14

Python 怎么批量处理文本文件:读取、替换、合并和导出

围绕批量文本处理的真实场景,讲清 Python 如何遍历文件夹、读取文本、替换内容、合并文件、处理编码和避免覆盖原文件。

相关工具

批量处理文本文件适合解决什么问题

如果你只有一个文本文件,手动打开、查找、替换就够了。但当你有几十个文案、上百个日志、很多 Markdown 文档、批量导出的字幕文件时,手工处理就很容易出错。Python 适合做这类重复工作:遍历文件夹、读取内容、替换某些词、清理空行、合并文件、输出新文件。

常见场景包括:把一批文章里的旧品牌名替换成新品牌名;批量删除文案里的多余空行;把多个 txt 合并成一个文件;统计每个文件字数;把日志里包含某个关键词的行提取出来;把 Markdown 文件里的某段固定说明统一更新。

这类任务的关键不是写出多高级的代码,而是保证安全。批量脚本一旦写错,可能一次性改坏很多文件。所以第一原则是:先读不写,先输出到新目录,不要直接覆盖原文件。确认结果没问题后,再决定是否替换原文件。

遍历文件夹并读取文本

Python 的 pathlib 很适合处理文件路径。比如读取 input 目录下所有 txt 文件:

python代码示例
from pathlib import Path

input_dir = Path('input')
for path in input_dir.glob('*.txt'):
    text = path.read_text(encoding='utf-8')
    print(path.name, len(text))

glob('*.txt') 只匹配当前目录下的 txt 文件。如果要包含子目录,可以用 rglob('*.txt')。读取时指定 encoding 很重要。现在推荐 UTF-8,但有些旧文件可能是 GBK。如果遇到 UnicodeDecodeError,可以先尝试 encoding='gbk',或者在读取前确认文件来源。

不要一开始就写回文件。先打印文件名和长度,确认脚本确实读到了你想处理的文件。批量处理里,路径写错比代码语法错更危险。比如你以为处理的是测试目录,实际却扫到了正式资料目录。

批量替换内容并输出到新目录

最安全的做法是把处理结果写到 output 目录,保留原文件。示例:

python代码示例
from pathlib import Path

input_dir = Path('input')
output_dir = Path('output')
output_dir.mkdir(exist_ok=True)

for path in input_dir.glob('*.txt'):
    text = path.read_text(encoding='utf-8')
    new_text = text.replace('旧品牌名', '新品牌名')
    target = output_dir / path.name
    target.write_text(new_text, encoding='utf-8')

这段代码做了三件事:读取 input 里的文件;用 replace 替换文本;把结果写入 output。原文件不会被改动。你可以打开 output 里的几个文件抽查,确认替换符合预期。

如果替换规则很多,可以用一个字典:

python代码示例
rules = {
    '旧品牌名': '新品牌名',
    '旧网址': '新网址',
}
for old, new in rules.items():
    text = text.replace(old, new)

替换前要想清楚是否需要大小写区分、是否只替换完整词、是否会误伤其他内容。简单 replace 是全文替换,适合明确固定文本;复杂规则可以考虑正则。

用正则处理空行、空格和固定格式

文本清洗经常要处理多余空行、行尾空格、重复符号。Python 的 re 模块可以完成:

python代码示例
import re

text = re.sub(r'[ \t]+\n', '\n', text)
text = re.sub(r'\n{3,}', '\n\n', text)
text = text.strip() + '\n'

第一行去掉行尾多余空格和制表符,第二行把连续三行以上空行压成两行,第三行去掉开头结尾空白并保留一个结尾换行。这些规则适合整理文章、Markdown、字幕和复制来的文本。

正则很强,但也容易误伤。写复杂正则前,建议先用正则工具测试几段样本。确认规则只命中你想处理的内容,再放进批量脚本。尤其是涉及中文标点、换行和多段文本时,直接在所有文件上跑很危险。

合并多个文本文件

如果要把多个 txt 合并成一个文件,可以按文件名排序后逐个读取:

python代码示例
from pathlib import Path

input_dir = Path('input')
parts = []
for path in sorted(input_dir.glob('*.txt')):
    text = path.read_text(encoding='utf-8').strip()
    parts.append(f'# {path.stem}\n\n{text}')

result = '\n\n'.join(parts)
Path('merged.txt').write_text(result, encoding='utf-8')

这里给每个文件内容前加了一个标题,方便合并后知道内容来自哪个文件。如果你合并的是 Markdown,这种写法尤其有用。合并日志时则可以加文件名和分隔线。

合并前要考虑顺序。文件名如果是 1.txt、2.txt、10.txt,普通排序可能把 10 放在 2 前后不符合预期。可以用更规范的命名,比如 001.txt、002.txt、010.txt,或者自己写排序规则。

批量脚本的安全习惯

第一,先在少量样本上测试。复制三五个文件到 test 目录,确认脚本效果,再处理全部文件。第二,默认输出到新目录,不直接覆盖原文件。第三,打印处理日志,比如处理了多少文件、跳过了哪些文件、每个文件替换了多少次。第四,保留备份。

第五,处理中文文件时明确编码。第六,路径尽量用 pathlib,不要手动拼接反斜杠。第七,涉及正则替换时先用工具验证规则。第八,处理结果最好用文本对比工具抽查几份,看看是否有误删或误替换。

工具帮的文本清洗、正则测试、字数统计和文本对比工具都能辅助这类流程。Python 负责批量执行,在线工具负责规则验证和结果检查。这样既能提高效率,也能降低批量误操作的风险。

常见问题

批量替换可以直接覆盖原文件吗?

不建议。先输出到新目录并抽查结果,确认没问题后再考虑替换原文件。

读取文本报编码错误怎么办?

先确认文件编码。常见是 UTF-8、UTF-8 with BOM 或 GBK,可以分别尝试。

什么时候需要用正则?

固定文本替换用 replace 就够了;需要匹配模式、空行、编号、复杂格式时再用正则。

Python 实用

继续阅读

返回专题