Python读取文本文件末位字符并按条件删除的问题求解
问题原因分析
第一段代码报错原因
with语法会在代码块执行结束后自动关闭关联的文件句柄,你的truncate()调用写在第一个with代码块之外,此时filehandle已经被关闭,自然无法执行操作。同时你第二次打开文件使用的句柄是f,却依然调用已关闭的filehandle的方法,属于句柄调用错误。
第二段代码无效果的核心原因
- 字符判断逻辑失效:
rb模式读取到的内容是bytes类型,直接使用str(last)转换会得到带b前缀和引号的字符串(例如bytes类型的b','转成str后为"b','"),你截取子串的方式兼容性极差,几乎不可能匹配到单独的逗号字符,因此if判断永远不会触发。 - 文件指针位置错误:调用
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
相关产品推荐
相关产品推荐

