Python从列表文本提取坐标并标记类型导出CSV的方法
解决方案:提取步行路线坐标并导出为CSV
当然可以搞定这个需求!我来帮你一步步实现,解决你之前用'(['提取坐标失败的问题——主要是文本格式里的空格、额外字符干扰了简单匹配,用正则表达式来定位坐标会更稳妥。
思路拆解
咱们分四步走,把问题拆成简单的小任务:
- 从列表第一个元素里剥离出纯路线文本(去掉后面的服务时间、时长等无关内容)
- 拆分出每个途经点的完整信息
- 给每个点标记类型(起点/中间点/终点)
- 将整理好的数据写入CSV文件
完整代码实现
import re import csv # 你的原始列表 route_list = [ 'Route 0: 0([1.11, 2.11]) -> 68([5.11, -6.11]) -> 0([1.11, 2.11]) Service Time(53) Time(1:54, 24:0)\n', 'item 2\n', 'item 3\n', 'item 4\n' ] # 1. 提取纯路线文本,截断掉后面的服务时间等无关内容 route_text = route_list[0].split('Service Time')[0].strip() # 2. 按箭头分割每个途经点 points = route_text.split(' -> ') # 3. 处理每个点:提取编号、坐标,标记类型 processed_data = [] for idx, point in enumerate(points): # 用正则匹配点编号和坐标,适配带负号的小数 match = re.match(r'(\d+)\((\[.*?\])\)', point) if match: point_id = match.group(1) # 解析坐标字符串为数值:去掉括号、空格,拆分x/y coord_str = match.group(2).strip('[]').replace(' ', '') x, y = map(float, coord_str.split(',')) # 标记点类型:第一个是起点,最后一个是终点,其余是中间点 if idx == 0: point_type = '起点' elif idx == len(points)-1: point_type = '终点' else: point_type = '中间点' processed_data.append({ '点编号': point_id, 'X坐标': x, 'Y坐标': y, '类型': point_type }) # 4. 写入CSV文件 output_file = '步行路线坐标.csv' with open(output_file, 'w', encoding='utf-8', newline='') as f: writer = csv.DictWriter(f, fieldnames=['点编号', 'X坐标', 'Y坐标', '类型']) writer.writeheader() writer.writerows(processed_data) print(f"文件 {output_file} 已成功生成!")
关键部分解释
- 正则匹配:
r'(\d+)\((\[.*?\])\)'专门用来匹配0([1.11, 2.11])这种格式,其中:(\d+)抓出点的编号(比如0、68)(\[.*?\])精准定位括号里的坐标内容(比如[1.11, 2.11])
- 点类型判断:因为路线是从起点出发最终回到起点,所以第一个点标记为
起点,最后一个标记为终点,中间所有点都是中间点 - CSV写入:用
csv.DictWriter可以按字段名规整写入,生成的CSV结构清晰,方便后续查看或处理
最终CSV效果
生成的文件内容如下:
点编号,X坐标,Y坐标,类型 0,1.11,2.11,起点 68,5.11,-6.11,中间点 0,1.11,2.11,终点
内容的提问来源于stack exchange,提问作者Mazz
相关产品推荐
相关产品推荐

