python - 读取文本文件中的最后一个字符,然后在满足条件时将其删除
问题描述
我已经为此苦苦挣扎了大约两个小时,我是 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 语句。
解决方案
您可以仅将此行更改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()
推荐阅读
- android - 当应用程序被杀死时,whatsapp 或其他消息应用程序如何运行某些任务?
- laravel - 如何在关系上使用 paginate() 并将字段添加到 Laravel 7 中的模型对象?
- java - 将对象列表保存到数据库,但如果一条记录失败,请继续使用 jpa spring boot
- azure - 当 microsoft AD 图快到 EOF 时使用 Azure 资源管理器
- android - 如何向 PagingDataAdapter 提交非 pagingData(只是对象列表)?
- python - Opencensus Python gRPC 的“异常迭代请求”
- c - Sprintf 正在连接值
- java - 在一维战舰游戏Java中实现第二艘船
- postgresql - 如何使用 Postgres 创建 trigram 或 ngram 单词
- node.js - Vercel.com 托管:开发和生产 URL