首页 > 解决方案 > 读取文本文件中的最后一个字符,然后在满足条件时将其删除

问题描述

我已经为此苦苦挣扎了大约两个小时,我是 python 新手,所以不要判断!

本质上,我试图读取文本文件中的最后一个字符,然后检测它是否是逗号,“,”,如果是,我想删除那个字符。我尝试了不同的东西,这就是我现在所拥有的,我不确定为什么它不起作用。

    with open("Student_Directory.txt", "rb+") as filehandle:
    filehandle.seek(0, os.SEEK_END)
    filehandle.seek(filehandle.tell() - 1, os.SEEK_SET)
    last = filehandle.read()
    last = str(last)
    last = last[2:3]
if last == ",":
    with open("Student_Directory.txt", "rb+") as f:
        f.seek(-1, os.SEEK_END)
        filehandle.truncate()

这读取 ValueError: truncate of closed file

我也试过

    with open("Student_Directory.txt", "rb+") as filehandle:
    filehandle.seek(0, os.SEEK_END)
    filehandle.seek(filehandle.tell() - 1, os.SEEK_SET)
    last = filehandle.read()
    last = str(last)
    last = last[2:3]
    if last == ",":
        filehandle.truncate()

有了这个,实际上什么都没有发生。如果我删除 if 语句,它会很好地截断最后一个字符,但由于某种原因,我无法使用 filehandle.read() 来生成将实际执行的任何类型的 if 语句。

标签: pythonpython-3.x

解决方案


您可以仅将此行更改filehandle.truncate()f.truncate(). 因为当您的代码退出with语句时文件句柄关闭。您无法超出文件句柄变量范围。

import os


with open("Student_Directory.txt", "rb+") as filehandle:
    filehandle.seek(0, os.SEEK_END)
    filehandle.seek(filehandle.tell() - 1, os.SEEK_SET)
    last = filehandle.read()
    last = str(last)
    last = last[2:3]

if last == ",":

    with open("Student_Directory.txt", "rb+") as f:
        f.seek(-1, os.SEEK_END)
        f.truncate()

或者

您可以通过在第二个代码中添加 seek() 函数来删除最后一个字符,如下所示。

import os


with open("Student_Directory.txt", "rb+") as filehandle:
    filehandle.seek(0, os.SEEK_END)
    filehandle.seek(filehandle.tell() - 1, os.SEEK_SET)
    last = filehandle.read()
    last = str(last)
    last = last[2:3]
    if last == ",":
        # Adding seek function to adjust cursor!
        filehandle.seek(-1, os.SEEK_END)
        filehandle.truncate()

推荐阅读