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

如何读取文本文件并删除含指定字符串的条目及关联行

解决Phonebook文件中删除指定条目及关联Note行的问题

你遇到的核心问题是原代码只逐行检查是否包含目标字符串,但没考虑到每个包含"City=Seattle"的条目行后面会跟着一条Note行,需要同时跳过这两行。我们可以通过引入一个状态标记来跟踪是否需要跳过下一行,完美实现这个需求。

改进后的代码方案

# 使用with语句自动管理文件资源,更安全省心
with open("phonebook.txt", "r") as file:
    all_lines = file.readlines()

with open("phonebook.txt", "w") as file:
    skip_next = False  # 标记是否需要跳过下一行(对应的Note行)
    for line in all_lines:
        stripped_line = line.strip()
        if skip_next:
            # 这是要跳过的Note行,重置标记后跳过写入
            skip_next = False
            continue
        # 检查当前行是否是要删除的Seattle条目(支持不区分大小写匹配)
        if "city=seattle" in stripped_line.lower():
            # 标记下一行需要跳过
            skip_next = True
            continue
        # 其他情况正常写入行内容
        file.write(line)

代码逻辑解释

  • 状态标记skip_next:用来记录是否需要跳过当前行的下一行。当我们找到包含"City=Seattle"的条目行时,将这个标记设为True,下一次循环就会自动跳过对应的Note行。
  • 不区分大小写匹配:用lower()把行内容转为小写后再检查,避免因为大小写差异(比如City=Seattle和city=seattle)漏删条目。如果你的文件格式严格统一,也可以去掉lower()改成精确匹配。
  • with语句:替代手动open/close操作,能自动处理文件关闭,避免资源泄漏,是Python中处理文件的最佳实践。

测试验证

用你提供的示例输入测试:

Name=John Doe, Address= 25 Main St, City=Denver,Phone= 1-310-999-9999
Note: John has a dog
Name=Jane Doe, Address= 12 Richard Rd, City=Seattle, Phone= 1-310-999-9999
Note: Jane is allergic to nuts
Name=Michael Smith, Address= 25 California BLVD, City=Los Angeles, Phone= 1-310-999-9999

执行代码后会得到:

Name=John Doe, Address= 25 Main St, City=Denver,Phone= 1-310-999-9999
Note: John has a dog
Name=Michael Smith, Address= 25 California BLVD, City=Los Angeles, Phone= 1-310-999-9999

完全符合你的需求。

内容的提问来源于stack exchange,提问作者J. Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:09