Python中读取文件排序后,如何清除原文件内容并覆盖写入?
文件排序并覆盖原内容的正确实现
你的代码问题出在文件指针的位置上:用r+模式打开文件后,readlines()会把指针移到文件末尾,这时候调用truncate()只会截断到当前指针位置(也就是文件末尾),等于没清空原内容,写入的排序后内容会直接追加到原文件后面,达不到覆盖的效果。
给你两种解决办法:
方法一:修正现有代码
在truncate()之前,把文件指针移回文件开头(用seek(0)),这样截断操作才会清空整个文件:
WL01 = 'Test.txt' with open(WL01,'r+') as WL: lines = WL.readlines() lines.sort() WL.seek(0) # 将指针移到文件开头 WL.truncate() # 从开头截断,清空文件 for line in lines: print(line, file=WL, end='') # 加上end=''避免重复换行,因为readlines会保留原换行符
注意:print()默认会加一个换行符,而readlines()读取的每一行本身已经带有换行符,所以要加上end=''防止出现多余空行。
方法二:更直观的分步写法
先读取并排序内容,再用w模式打开文件(w模式会自动清空原文件内容),直接写入排序后的内容:
WL01 = 'Test.txt' # 读取并排序 with open(WL01, 'r') as WL: lines = WL.readlines() lines.sort() # 写入覆盖 with open(WL01, 'w') as WL: WL.writelines(lines)
这种写法逻辑更清晰,不容易出错,也不需要手动处理指针和截断操作。
内容的提问来源于stack exchange,提问作者erukumk
相关产品推荐
相关产品推荐

