Python实现遍历多文件匹配唯一字符串并追加对应专属文本
问题排查与代码修正
原代码核心问题:
- 误用Python内置函数名
input作为变量名,会触发命名冲突 - 嵌套循环逻辑错误:
for word in line会把每行拆成单个字符遍历,完全偏离了检查文件是否包含目标唯一字符串的需求 - 未先判断当前文件是否包含目标唯一字符串,直接对每行做处理,逻辑顺序颠倒
- 找到目标行时直接拼接整个
input列表,而非对应索引的专属文本 - 写入环节重复循环导致同一行被多次写入
修正后的代码:
# 唯一字符串与对应专属文本,保持顺序一一对应 target_strings = ["444", "445"] exclusive_texts = ["text-444", "text-445"] from pathlib import Path files_dir = "C:/Users/Administrator/Desktop/pythone-env/" # 遍历指定目录下所有.ini文件 for ini_file in Path(files_dir).rglob('*.ini'): # 读取文件全部内容 with ini_file.open('r', encoding='utf-8') as f: content = f.read() file_lines = content.splitlines() # 标记当前文件匹配到的专属文本 matched_text = None # 检查文件是否包含目标唯一字符串,找到对应专属文本 for idx, target in enumerate(target_strings): if target in content: matched_text = exclusive_texts[idx] break # 每个文件仅含一个唯一字符串,找到即停止 # 仅当匹配到专属文本时,才修改文件 if matched_text: with ini_file.open('w', encoding='utf-8') as f: for line in file_lines: stripped_line = line.rstrip('\n') # 匹配目标行,追加专属文本 if stripped_line == "subnetIP=255.255.255.0": stripped_line += matched_text f.write(stripped_line + '\n')
关键改进说明:
- 重命名变量规避内置函数冲突:
input改为exclusive_texts,string改为target_strings,filesDir调整为符合PEP8规范的files_dir - 先读取文件全部内容,一次性检查是否包含目标唯一字符串,确定要追加的专属文本,避免重复遍历
- 使用
enumerate获取目标字符串的索引,精准匹配对应顺序的专属文本 - 仅当文件匹配到唯一字符串时才执行修改写入操作,提升效率
- 统一编码格式为
utf-8,避免不同系统下的编码问题
内容的提问来源于stack exchange,提问作者Florin Alexandru
相关产品推荐
相关产品推荐

