Python读取坐标文件并拆分x/y坐标时出现TypeError错误的问题排查
问题分析与解决方案
首先,你的代码里有几个关键错误导致了TypeError和逻辑问题:
- 错误的列表索引方式:
t1[1,0]用了元组作为索引,而Python列表只接受整数或切片(比如t1[1]或者t1[1:]),这直接触发了list indices must be integers or slices, not tuple错误。 - 错误的操作对象:
t1是你对单行文本split后的列表,不是文件对象,不能调用readline()方法。 - 循环内重复初始化列表:你在
for循环里每次都重新创建空的x和y列表,这样最终只会保留最后一个坐标值,而不是所有坐标。
另外,你的原始数据里坐标格式是"x.,y."(末尾带点),需要先处理掉这些多余的点才能正确转成浮点数。
修正后的完整代码
polygons = [] # 用来存储所有多边形的信息 with open('dados_utm.txt', 'rt') as arquivo: for line in arquivo: line = line.strip() # 去掉换行符和首尾空白 if not line: # 跳过空行 continue parts = line.split(' ') # 提取名称:第二个元素,去掉转义的引号 polygon_name = parts[1].replace('"', '') # 提取坐标部分:从第三个元素开始的所有内容 coord_strings = parts[2:] x_coords = [] y_coords = [] for coord in coord_strings: # 去掉坐标末尾的点,再按逗号分割 cleaned_coord = coord.rstrip('.') x_str, y_str = cleaned_coord.split(',') x_coords.append(float(x_str)) y_coords.append(float(y_str)) # 将当前多边形的信息存入列表 polygons.append({ 'type': parts[0], 'name': polygon_name, 'x': x_coords, 'y': y_coords }) # 打印结果验证 for poly in polygons: print(f"多边形名称: {poly['name']}") print(f"X坐标列表: {poly['x'][:3]}...") # 只打印前3个坐标看效果 print(f"Y坐标列表: {poly['y'][:3]}...") print('---')
代码解释
- 使用
with语句:这是Python处理文件的最佳实践,会自动帮你关闭文件,避免资源泄漏。 - 逐行处理:直接遍历文件对象的每一行,比手动用
readline()更简洁。 - 跳过空行:处理文件末尾可能出现的空行,避免报错。
- 提取名称:通过
replace('"', '')去掉转义的双引号,得到干净的多边形名称。 - 处理坐标:
- 先去掉每个坐标字符串末尾的多余点(比如
"420545.,8039109."变成"420545.,8039109") - 按逗号分割成x和y的字符串,再转成浮点数存入对应的列表。
- 先去掉每个坐标字符串末尾的多余点(比如
- 结构化存储:用字典存储每个多边形的类型、名称、x/y坐标,方便后续使用。
运行效果
执行后你会得到一个包含所有多边形信息的列表,每个元素都清晰对应了名称和对应的x、y坐标集合,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user11545193
相关产品推荐
相关产品推荐

