Python翻译文本文件时如何保留原始段落与空格格式
问题根因
你当前代码丢失排版格式的核心原因是line.split()操作会直接丢弃行内所有的空格、制表符等空白字符,且遍历完每一行后没有补回原有的换行符,最终所有内容都变成了用单空格分隔的连续文本。
解决方法
用正则匹配仅替换文本中的单词部分,所有空白、换行、标点等非单词内容全部原样保留,完全不改动原有排版。
修改后完整代码
# 导入依赖 import json import re # Step 1: 加载翻译词典 with open('/home/jovyan/english_to_lolspeak_fellow/tranzlashun.json') as translationFile: data = json.load(translationFile) # 统一将词典key转为小写,避免大小写匹配失败 lower_data = {k.lower(): v for k, v in data.items()} # Step 2: 读取源文件完整内容 with open('/home/jovyan/english_to_lolspeak_fellow/english.txt', 'r', encoding='utf-8') as english_text: raw_content = english_text.read() # Step 3: 仅替换单词,保留所有原始格式 def translate_match(match): word = match.group() # 小写匹配词典,找不到匹配则返回原单词 return lower_data.get(word.lower(), word) # 正则匹配所有由字母组成的单词,其余内容全部原封不动保留 translated_content = re.sub(r'[A-Za-z]+', translate_match, raw_content) # Step 4: 写入翻译结果,格式和原文完全一致 with open('/home/jovyan/english_to_lolspeak_fellow/lolcat.txt', 'w', encoding='utf-8') as lolcat_file: lolcat_file.write(translated_content)
改动说明
- 不再按行拆分再用
split()切割单词,避免丢失空白格式,直接读取全文本做正则替换 - 用
re.sub仅匹配字母组成的单词做翻译替换,所有空格、换行、标点、段落间距都原封不动保留 - 优化了词典匹配逻辑,统一用小写匹配,避免原单词大小写不一致导致匹配失败
- 移除了多余的手动关闭文件操作,
with上下文管理器会自动处理文件关闭
内容的提问来源于stack exchange,提问作者nabs
相关产品推荐
相关产品推荐

