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

如何修复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()  # 截断文件,清除原文件剩余内容

修复逻辑说明

  1. 先读取文件所有行到内存中,避免读写冲突。
  2. 调用 f.seek(0) 将文件指针移到开头,准备重新写入内容。
  3. 遍历每一行,只有当该行不同时包含用户输入的作者和ISBN时,才将其写入文件——这样就自动过滤掉了需要删除的行。
  4. 最后用 f.truncate() 截断文件,确保原文件中未被覆盖的多余内容被清除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:05:28