You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:52:35