如何在文件中按指定关键词将字符串拆分至不同集合?
死循环原因排查
- 循环条件变量未更新:初始读取第一行
COUNTRIES后,变量l的值在循环体内从未改变,导致while l.startswith('COUNTRIES')永远为真,直接触发死循环。 - 读取行的代码错误:
j = input.readline未加括号,实际是把函数对象赋值给j,而非读取到的行内容,后续j == 'PEOPLE'的判断永远不成立,无法触发break。 - 语法与逻辑错误:
if j == 'PEOPLE'末尾缺少冒号:,且文件读取的行默认包含换行符(如'PEOPLE\n'),直接与'PEOPLE'对比永远不相等。
实现关键词拆分的正确代码
我们可以先定义目标关键词集合,遍历文件行时,遇到关键词则新建集合,后续非空行(排除空行和下一个关键词)归入当前集合,最终将所有集合存入列表:
result = [] current_set = None target_keys = {'COUNTRIES', 'PEOPLE'} with open('countries.txt', 'r') as f: for line in f: line = line.strip() # 去除换行符与首尾空白 if not line: continue # 跳过空行 if line in target_keys: # 触发关键词,新建集合并加入结果列表 current_set = set() result.append(current_set) elif current_set is not None: # 将内容归入当前活跃集合 current_set.add(line) print(result)
运行后输出与期望一致:
[{'America', 'Canada', 'Russia', 'Poland'}, {'George', 'John', 'James', 'Kenny'}]
代码说明
- 用
with语句自动管理文件句柄,避免资源泄漏。 strip()处理每行内容,同时跳过空行,避免无效数据干扰。target_keys集中存放关键词,后续新增分类只需修改该集合即可,扩展性强。- 遇到关键词时初始化新集合,后续行直接归入当前集合,逻辑清晰且彻底避免死循环问题。
内容的提问来源于stack exchange,提问作者Polyaness
相关产品推荐
相关产品推荐

