Python中将不规则分隔的多边形坐标字符串转换为多维数组
问题根因
你触发报错的核心原因是直接将包含多个坐标对、换行符、混合分隔符的整段多边形字符串传入float()方法,float()仅支持转换单个合法数字字符串,无法识别批量坐标和空白字符。
无需修改源文件的解决方案
Python内置的字符串split()方法不传参数时,会自动将任意连续的空白字符(包括空格、制表符\t、换行符\n等)作为分隔符,同时自动忽略字符串首尾的空白,刚好适配你当前的非结构化坐标格式,无需改动源文件即可完成解析,参考实现代码如下:
with open('/Path/Data.lb', 'r', encoding='utf-8') as f: data = f.read() # 按分隔符>拆分所有多边形字符串 polygon_chunks = data.split('>') regions = [] # 跳过拆分得到的首个空片段(当文件以>开头时会产生) for poly_chunk in polygon_chunks[1:]: # 自动拆分所有数字字符串,自动适配混合分隔符 num_list = poly_chunk.split() # 两两配对为(x,y)坐标对,转换为float类型 polygon_coords = [] for idx in range(0, len(num_list), 2): x = float(num_list[idx]) y = float(num_list[idx+1]) polygon_coords.append((x, y)) regions.append(polygon_coords)
运行后regions就是嵌套数组结构,第一层为所有多边形,第二层为单个多边形的所有(x,y)浮点型坐标对。
如需统一源文件分隔符的处理方案
如果需要生成格式规范的新文件方便后续处理,可以用以下脚本将原文件转换为统一分隔符格式,不会改动原文件:
with open('/Path/Data.lb', 'r', encoding='utf-8') as f_in, \ open('/Path/NormData.lb', 'w', encoding='utf-8') as f_out: raw_data = f_in.read() polygon_chunks = raw_data.split('>') norm_polys = [] for chunk in polygon_chunks: if not chunk.strip(): continue num_list = chunk.split() # 坐标对用逗号分隔,每行一个坐标点 coord_lines = [f"{num_list[i]},{num_list[i+1]}" for i in range(0, len(num_list), 2)] norm_polys.append('\n'.join(coord_lines)) # 用>作为多边形分隔符写回新文件 f_out.write('>'.join(norm_polys))
处理后的新文件每个坐标点占一行,x/y用逗号分隔,多边形之间用>分隔,后续读取逻辑更简单,也可以直接用csv等标准库读取。
内容的提问来源于stack exchange,提问作者Feva
相关产品推荐
相关产品推荐

