Python删除文本文件前n个字符时写入内容失败问题咨询
问题根因
- 执行
f.readlines()读取完全部文件内容后,文件指针已经移动到了文件的末尾偏移量位置。 f.truncate(0)仅会清空文件的内容,不会修改当前文件指针的位置,此时指针仍然停留在原文件的末尾位置。- 后续调用
f.write(texte1)时,内容会从当前指针位置(远大于清空后文件的0长度位置)开始写入,相当于文件起始位置到指针位置之间被填充了大量空字节,写入的有效内容位于空字节之后,所以直观上看起来文件仍然是空的。
修复方案
在写入内容前调用f.seek(0)将文件指针移动到文件起始位置即可,修改后的代码如下:
def get_texte(): f = open("hp.txt", "r+", encoding="utf8") texte = '' nb = 12 for line in f.readlines(): texte += line.strip() texte1 = texte[nb:] f.truncate(0) f.seek(0) # 新增该行,将文件指针移动到文件开头 f.write(texte1) f.close() return texte
额外优化建议
当前实现会把整个文件内容加载到内存中,处理超大容量文本文件时会占用极高内存,甚至出现内存溢出问题。可以改为按块读取文件、跳过前n个字符后逐块写入新文件,再替换原文件的方式实现,内存占用会低很多。
内容的提问来源于stack exchange,提问作者ImFabien75
相关产品推荐
相关产品推荐

