Python操作文件插入行间隔星号时内容被写入末尾的问题咨询
问题根因
你遇到的现象是Python文本模式的I/O缓冲机制和读写切换规则导致的:
- 以
r+模式打开文本文件时,读操作和写操作切换前,必须调用seek()、tell()或者flush()刷新缓冲区,否则写入操作的位置会不符合预期。你的代码中读完一行调用tell()拿到oldpos后直接执行写入,此时缓冲区没有正确同步,所有写入的内容最终都被追加到了文件末尾。 - 另外你的实现逻辑本身就存在缺陷:文本文件是顺序存储结构,不存在“中间插入”的操作,你就算修复了指针问题,在当前位置写入内容也会直接覆盖后面的原有文本,根本达不到插入分隔符的效果。
正确实现方案
不要尝试在原文件中直接插入内容,先读全所有行,再覆盖写入整个文件即可,实现代码如下:
with open('exercise3.txt','r+') as file: # 先读取所有行到内存 lines = file.readlines() # 指针回到文件开头 file.seek(0) # 清空原有内容,避免新内容长度比旧内容短时残留旧数据 file.truncate() for idx, line in enumerate(lines): file.write(line) # 除了最后一行,每写完一行就插入20个星号的分隔符 if idx != len(lines) - 1: file.write('*' * 20 + '\n')
内容的提问来源于stack exchange,提问作者ShirinJZ
相关产品推荐
相关产品推荐

