You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析txt坐标列表时如何正确提取坐标值到对应列表

问题根源

你之前用的固定字符偏移切片方案,仅适用于所有行长度完全一致、所有坐标整数部分位数固定的场景。当出现1012.0这类4位整数的坐标时,对应行总长度会增加1个字符,全局固定步长37的循环会从错位的位置开始切片,后续所有行的索引基准全部偏移,仅靠局部调整偏移参数无法修正全局错位问题,最终就会出现你拿到的乱码式切片结果。

可行解决方案

不要靠数字符位置做提取,直接匹配数据的固定结构实现解析,两种常用方案都可以彻底规避长度变化导致的错位:

方案1:正则匹配提取(最简洁,鲁棒性最强)

直接通过正则规则匹配[0 [x,y]][1 [x,y]]的固定结构,自动捕获四个坐标值,完全不受坐标整数部分位数变化影响:

import re

head_x = []
head_y = []
foot_x = []
foot_y = []

# 匹配所有符合格式的坐标组,自动提取四个坐标值
match_res = re.findall(r'\[0 \[([\d.]+), ([\d.]+)\]\]\[1 \[([\d.]+), ([\d.]+)\]\]', data)
for hx, hy, fx, fy in match_res:
    # 需要数值类型就转float,需要字符串直接append即可
    head_x.append(float(hx))
    head_y.append(float(hy))
    foot_x.append(float(fx))
    foot_y.append(float(fy))

运行后可以直接得到所有行的正确坐标,哪怕后续出现5位整数的坐标值,也不需要修改代码。

方案2:按行拆分后逐段解析(无需引入正则库)

先把完整数据按换行符拆分为独立行,再通过固定分隔符切割每一行提取坐标,同样不需要数字符偏移:

head_x = []
head_y = []
foot_x = []
foot_y = []

# 拆分所有非空行
lines = [line.strip() for line in data.split('\n') if line.strip()]
for line in lines:
    # 先拆分点0、点1的内容段
    p0_seg, p1_seg = line.split('][1 ')
    # 提取点0的x、y坐标
    hx, hy = p0_seg.split('[')[-1].rstrip(']').split(', ')
    # 提取点1的x、y坐标
    fx, fy = p1_seg.lstrip('[').rstrip(']]').split(', ')
    # 存入对应列表
    head_x.append(float(hx))
    head_y.append(float(hy))
    foot_x.append(float(fx))
    foot_y.append(float(fy))

注意:如果需要保留字符串格式的坐标值,去掉float()转换直接append即可。

内容的提问来源于stack exchange,提问作者Junwoo Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:18:16