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

如何向文件写入非重复ISBN的信息?现有代码需完善

解决重复ISBN书籍信息写入问题

首先得说,你现在的代码逻辑有点走偏了——比如按字符长度循环range(1,len(message))完全不是在处理书籍条目,而是在逐个字符遍历文本,这肯定达不到去重的目的。咱们重新梳理下思路:要实现「只写入未存在的ISBN信息」,核心是先记录已有的ISBN,再检查新条目是否重复。

核心步骤梳理

  1. 从download.txt里读出所有已经存在的ISBN,存到一个集合里(集合查询重复的效率最高)。
  2. 从e.txt里拆分出每一条书籍信息,提取对应的ISBN。
  3. 如果这个ISBN不在已有的集合里,就把这条信息追加到download.txt,同时把ISBN加入集合避免后续重复。

修正后的代码示例

# 第一步:读取已有的ISBN,存入集合
existing_isbns = set()
try:
    with open('download.txt', 'r') as d_file:
        for line in d_file:
            # 从每行中提取ISBN,沿用你原来的提取逻辑(可根据实际格式调整)
            for segment in line.split():
                if segment.startswith("isbn"):
                    isbn = segment[8:-1]  # 适配格式如 isbn="123456",去掉前后的标识字符
                    existing_isbns.add(isbn)
except FileNotFoundError:
    # 如果download.txt还没创建,就初始化空集合
    pass

# 第二步:处理e.txt中的新书籍条目
with open('e.txt', 'r') as c_file:
    full_content = c_file.read()
# 按"book"分割出每个书籍条目(跳过分割后第一个空字符串,因为原文本开头可能是book)
book_items = full_content.split('book')[1:]

# 第三步:追加写入不重复的条目
with open('download.txt', 'a') as d_file:
    for item in book_items:
        current_isbn = None
        # 提取当前条目的ISBN
        for segment in item.split():
            if segment.startswith("isbn"):
                current_isbn = segment[8:-1]
                break
        # 检查ISBN是否存在,不存在就写入
        if current_isbn and current_isbn not in existing_isbns:
            # 把分割掉的"book"补回去,拼成完整条目
            full_book_entry = 'book' + item
            d_file.write(full_book_entry + '\n')  # 加换行符,让条目更清晰易读
            existing_isbns.add(current_isbn)

关键细节说明

  • 用with语句处理文件:自动帮你关闭文件,避免忘记关文件导致的资源泄漏问题。
  • 集合存储ISBN:集合的in操作比列表快很多,尤其是当文件里的条目越来越多的时候,效率差距会很明显。
  • 条目分割逻辑:这里假设你的e.txt里每个书籍条目都是以book开头的,如果实际格式是按空行分隔,把split('book')改成split('\n\n')就行。
  • ISBN提取适配:如果你的ISBN格式不是isbn="XXXX",比如是isbn: 978123456,那把segment[8:-1]改成segment.split(':')[1].strip()就可以,完全根据实际格式调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:43:27