如何解析 XY 坐标元组并将它们拆分为单独的 X 和 Y 列表

How to Parse XY Coordinate Tuples and Split Them Into Separate X and Y Lists

第一次寻求有关堆栈溢出的帮助,我实在是不知所措。

我目前正在做一个项目,我需要从非常大的可变长度 xml 文件中获取基于百分比的坐标元组,将它们分成单独的 X 和 Y 列表,然后找出两者之间的平均差异列表中的值。

我目前坚持将元组拆分为 X 和 Y 列表。

import xml.etree.ElementTree as ET'

lem = []

tree = ET.parse('testdata.xml')

root = tree.getroot()

for GazePointOnDisplayArea in root.findall("./GazeData/Left/GazePointOnDisplayArea"):

        le = GazePointOnDisplayArea.get('Value')

        lem.append(le)

print(lem)

#A test xml 文件缩短为五个元素给出以下输出

['(0.48734050, 0.50727710)', '(0.48989120, 0.50335540)', '(0.48709830, 0.50172430)', '(0.48531740, 0.50473010)', '(0.48797150, 0.51031550)']

理想情况下,我想以

结束
x = [0.48734050, 0.48989120, 0.48709830, 0.48531740, 0.48797150]
y = [0.50727710, 0.50335540, 0.50172430, 0.50473010, 0.51031550]

我已经尝试过 *zip 和映射方法,但似乎没有任何效果。我不确定我是否犯了解析错误,或者是否与小数有关,或者其他什么。

我愿意使用 python、numpy 或 pandas。

请指教

从输出中你得到它是你想要的输出的一个衬垫。 首先使用正则表达式提取数字,然后使用 numpy 重新排列它们:

import re
import numpy as np

text = ['(0.48734050, 0.50727710)', '(0.48989120, 0.50335540)', '(0.48709830, 0.50172430)', '(0.48531740, 0.50473010)', '(0.48797150, 0.51031550)']
x,y = np.array([[float(x) for x in re.findall(r"(\d+\.\d+)",line) ] for line in text]).T

你的问题是因为这实际上不是一个元组,而是一个字符串。

因此您首先需要将字符串元组转换为 python 文字元组。
例如'(0.48734050, 0.50727710)'(0.48734050, 0.50727710)

ast.literal_eval() 帮助我们做到这一点!

import ast

lem = ['(0.48734050, 0.50727710)', '(0.48989120, 0.50335540)', '(0.48709830, 0.50172430)', '(0.48531740, 0.50473010)', '(0.48797150, 0.51031550)']

x_list = []
y_list = []

for str_tuple in lem:
    x, y = ast.literal_eval(str_tuple)
    x_list.append(x)
    y_list.append(y)


>>> print(x_list)
[0.4873405, 0.4898912, 0.4870983, 0.4853174, 0.4879715]
>>> print(y_list)
[0.5072771, 0.5033554, 0.5017243, 0.5047301, 0.5103155]