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

Python读取文本文件末位字符并按条件删除的问题求解

问题原因分析

第一段代码报错原因

  • with语法会在代码块执行结束后自动关闭关联的文件句柄,你的truncate()调用写在第一个with代码块之外,此时filehandle已经被关闭,自然无法执行操作。同时你第二次打开文件使用的句柄是f,却依然调用已关闭的filehandle的方法,属于句柄调用错误。

第二段代码无效果的核心原因

  1. 字符判断逻辑失效:rb模式读取到的内容是bytes类型,直接使用str(last)转换会得到带b前缀和引号的字符串(例如bytes类型的b','转成str后为"b','"),你截取子串的方式兼容性极差,几乎不可能匹配到单独的逗号字符,因此if判断永远不会触发。
  2. 文件指针位置错误:调用read()方法读取最后一个字符后,文件指针会自动移动到文件末尾位置,此时调用truncate()会默认以当前指针位置(文件末尾)为截断终点,相当于没有对文件做任何修改。
修复后的可用代码
import os

target_file = "Student_Directory.txt"
# 提前判断文件非空,避免移动负指针报错
if os.path.getsize(target_file) > 0:
    with open(target_file, "rb+") as f:
        # 直接移动指针到最后一个字节的位置
        f.seek(-1, os.SEEK_END)
        # 读取1个字节后解码为utf-8字符,避免格式转换错误
        last_char = f.read(1).decode("utf-8")
        if last_char == ",":
            # 指针回退到最后一个字节的起始位置
            f.seek(-1, os.SEEK_END)
            # 从当前指针位置截断文件,即删除最后一个字符
            f.truncate()
  • 若你的文本文件使用非UTF-8编码(如GBK、GB2312),只需将代码中decode("utf-8")的编码参数替换为文件对应的编码即可。

内容的提问来源于stack exchange,提问作者Brandon Gillis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:57:03