如何基于正则表达式修改文本文件行?求Python正则及替换方法
问题解决方案
正则表达式编写
要实现将数词与milesimo/milesimos之间添加空格的需求,需要匹配数词部分和后续的milesimo变体,替换时保留原词的单复数形式。
正确正则表达式
re_for_identificate_1 = r'([a-z]+)(milesimo(s)?)'
替换语句调整
原代码中的替换字符串需要修改为保留捕获的内容,仅插入空格:
line = re.sub(re_for_identificate_1, r'\1 \2', line)
说明:
- 捕获组
\1匹配un/dos/tres/nueve这类数词 - 捕获组
\2匹配完整的milesimo或milesimos - 替换时在两组之间插入空格,完美匹配示例中的转换需求(如
unmilesimo→un milesimo、dosmilesimos→dos milesimos)
文件写回的最佳方式
直接用r+模式逐行读写会因文件指针位置问题导致内容覆盖混乱,推荐以下两种可靠方案:
方案1:全量读入内存后覆盖写入(适合中小型文件)
这种方式简单直观,避免指针操作的复杂问题:
import re re_pattern = r'([a-z]+)(milesimo(s)?)' # 读取全部文件内容 with open("data_path/filename_1.txt", "r") as file: content = file.read() # 批量执行替换 content = re.sub(re_pattern, r'\1 \2', content) # 将修改后的内容写入原文件 with open("data_path/filename_1.txt", "w") as file: file.write(content)
方案2:临时文件中转(适合大型文件)
如果文件体积过大,全量读入内存占用过高,可通过临时文件逐行处理,避免原文件损坏风险:
import re import os from tempfile import NamedTemporaryFile re_pattern = r'([a-z]+)(milesimo(s)?)' # 逐行处理写入临时文件 with open("data_path/filename_1.txt", "r") as src_file, \ NamedTemporaryFile(mode="w", delete=False, dir="data_path") as tmp_file: for line in src_file: modified_line = re.sub(re_pattern, r'\1 \2', line) tmp_file.write(modified_line) # 用临时文件替换原文件 os.replace(tmp_file.name, "data_path/filename_1.txt")
内容的提问来源于stack exchange,提问作者Santiago Nahuel Rodriguez
相关产品推荐
相关产品推荐

