读取文件时收集首字母为'p'的行生成的列表返回空是什么原因
问题排查与修正方案
错误点梳理
- 条件判断逻辑完全错误:
if [0] in makeList is 'p'是不成立的无效判断,导致内部代码从未执行,这是pList为空的核心原因。你需要判断的是每一行的首字符为p,而非判断列表[0]是否在文件对象中等同于'p'。 - 行筛选逻辑缺失:原有列表推导式没有做行首字符的判断,会无差别处理所有行,不符合需求。
- 切片逻辑错误:
split()[2:3]属于左闭右开切片,只会提取单个元素,如果你要提取索引2及之后的所有坐标值,应该改为[2:]。 - 变量未定义:代码末尾的
line变量没有赋值来源,运行时会直接抛出未定义错误。
正确可运行代码
pList = [] # 替换为你的实际文件路径 with open("你的目标文件路径", "r", encoding="utf-8") as makeList: for line in makeList.readlines(): # 去除首尾空白,跳过空行 stripped_line = line.strip() if not stripped_line: continue # 仅处理行首为p的行 if stripped_line.startswith('p'): # 拆分内容后提取坐标转元组 coord_parts = stripped_line.split() coord_tuple = tuple(map(int, coord_parts[2:])) pList.append(coord_tuple)
补充说明
- 若你的行首
p与后续内容无空格分隔,可自行调整拆分逻辑,比如先去掉首字符再做分割。 - 若坐标不是整数,把
int替换为对应的数据类型即可。
内容的提问来源于stack exchange,提问作者Vivian Somes
相关产品推荐
相关产品推荐

