如何修复Python中根据作者与ISBN删除文本文件指定行的问题
问题修复:删除书籍信息行的代码错误修正
你的代码出现清空文件的问题,是因为存在几个关键错误,下面逐一说明并给出修复方案:
原代码的核心问题
- 字符串判断逻辑错误:你写的
"removebookAuthor"+"removebookISBN"是把变量名当成固定字符串来匹配,根本不会用到用户输入的实际作者和ISBN值,应该直接使用变量removebookAuthor和removebookISBN。 - 需求逻辑搞反:原代码是把包含目标内容的行写入文件,这和“删除对应行”的需求完全相反——我们需要保留的是不包含指定作者和ISBN的行。
- 文件指针位置错误:
f.seek(2)会让写入操作从文件第2个字节开始,应该用f.seek(0)回到文件开头,才能正确覆盖原有内容。 - 匹配条件不合理:需要同时判断行中是否存在作者和ISBN两个值,而不是判断两者拼接后的字符串(文件里作者和ISBN是用分号分隔的,不会连在一起)。
修复后的代码
print() print("Removing a Book") print() removebookAuthor = input("Provide the author of the book you would like to remove>") removebookISBN = input("Provide the ISBN of the book you would like to remove>") with open("books.txt", "r+") as f: lines = f.readlines() f.seek(0) # 回到文件开头 for line in lines: # 只保留不同时包含作者和ISBN的行 if not (removebookAuthor in line and removebookISBN in line): f.write(line) f.truncate() # 截断文件,清除原文件剩余内容
修复逻辑说明
- 先读取文件所有行到内存中,避免读写冲突。
- 调用
f.seek(0)将文件指针移到开头,准备重新写入内容。 - 遍历每一行,只有当该行不同时包含用户输入的作者和ISBN时,才将其写入文件——这样就自动过滤掉了需要删除的行。
- 最后用
f.truncate()截断文件,确保原文件中未被覆盖的多余内容被清除。
内容的提问来源于stack exchange,提问作者Neyo
相关产品推荐
相关产品推荐

