如何读取文本文件并删除含指定字符串的条目及关联行
解决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
相关产品推荐
相关产品推荐

