Python编辑文本文件指定行内容时新增内容追加到末尾原因排查
问题原因
- 文件指针位置错误:使用
r+模式打开文件时,遍历读取每行内容的过程会持续向后移动文件指针,当你找到目标行准备写入时,指针已经移动到了文件末尾,所有写入内容自然会追加到结尾,不会修改目标位置的内容。 - 直接修改原文件的逻辑错误:文本文件是顺序存储的结构,不同行的长度不固定,你无法直接在原文件的中间位置插入/修改内容,强行写入只会覆盖后续内容或者残留旧内容,达不到预期效果。
- 代码存在语法错误:你没有初始化
line_number、flag_found变量就直接使用,末尾的read_obj.close()也是无效代码,使用with上下文管理器打开的文件会自动关闭,不需要手动调用close方法,且你从未定义过read_obj这个变量。
正确实现逻辑
修改文本文件的标准流程是先读取全部内容到内存,修改完成后再整体写回文件覆盖原有内容,实现代码如下:
def search_write_in_file(file_name, string_to_search, description): # 先读取所有行到内存 with open(file_name, 'r', encoding='utf-8') as f: lines = f.readlines() flag_found = 0 # 遍历修改内存中的行 for i in range(len(lines)): if string_to_search in lines[i] and flag_found == 0: # 去掉末尾换行,加描述后再加换行 lines[i] = lines[i].rstrip('\n') + description + '\n' flag_found = 1 # 如果要修改所有匹配行就删掉break,只改第一个匹配行就保留 break # 把修改后的内容写回文件 if flag_found == 1: with open(file_name, 'w', encoding='utf-8') as f: f.writelines(lines)
注意事项
- 如果需要同时修改多个匹配项(比如你同时要改Var2和Var4),可以去掉代码中的
break,并删除flag_found的判断逻辑,遍历所有行匹配修改即可。 - 操作前建议备份原文件,避免修改出错丢失原有内容。
内容的提问来源于stack exchange,提问作者abhi0687
相关产品推荐
相关产品推荐

