Python 将元组中存储的坐标字符串转换为列表
我有一个存储在元组序列中的坐标字符串,如Python 将元组中存储的坐标字符串转换为列表,python,data-processing,Python,Data Processing,我有一个存储在元组序列中的坐标字符串,如”(522187)(522187)(522191)(523188)(522190)(首先存储在一个deque中,然后转换为字符串) 如何将该实体转换为元组列表/数据?所以它看起来像是[(522187),(522187),(522191),(523188),(522190)] 使用split(“,”)进行简单拆分不起作用,因为它会在元组中由于“,”而分隔每个坐标 有没有更方便的方法将元组列表/数据存储在.csv文件的单个单元格中?我需要将从每个试验中收到的所
”(522187)(522187)(522191)(523188)(522190)
(首先存储在一个deque中,然后转换为字符串)
[(522187),(522187),(522191),(523188),(522190)]
您可以使用
)(
)拆分字符串,然后按摩各个元组:
>>> [tuple(int(v) for v in a.strip("()").split(", ")) for a in s.split(') (')]
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
第二,有很多方法。一种方法是将所有坐标存储为单个字符串,并隐式地知道它们是X/Y对:522187522187522191,
或者您可以直接存储[(522187),(522187),(522191)]
,并使用ast.literal_eval()
将其重新水化为元组列表
或者,最好使用一种不像CSV那样严格类型化的数据格式,例如,如果单独使用Python,则使用pickle文件;如果需要交换,则使用JSON,…答案是,使用正则表达式
res = [tuple(e.replace(" ", "").split(",")) for e in re.findall("[1-9]{3}, [1-9]{3}", string)]
这将是字符串元组的列表。
将它们转换为整数
list(map(lambda x: (int(x[0]), int(x[1])), res))
尚未完成此代码的优化。您可以执行以下操作:
from ast import literal_eval
tuples = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
result = [literal_eval(f'({x})') for x in tuples.strip('()').split(') (')]
下次你只需记住tuples=str(result)
!你可以用result=literal\u eval(tuples)
检索它,这对我很有用:
a = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
res = list(eval(a.replace(', ',',').replace(' ',',')))
输出:
[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
我感觉到了家庭作业的问题,显示您的代码。顺便说一下,您可以拆分(然后继续)(然后将它们解析为坐标列表,但是我相信正则表达式更适合您的问题。您需要按摩被复制者的答案,以便为您工作—在元组之间插入逗号,如下所示:
>>ast.literal_eval('[{}]'.format('),('.join)(string.split(')('))>>>>[(522187),(522187),(522191),(523188),(52219),)
祝你好运!@AKX这真的不是重复的吗?我想是。这回答了你的问题吗?Eval是邪恶的!:(ast.literal_Eval()
会是更安全的替代品。)这成功了!谢谢!我也将尝试使用json格式,因为我可以看到PsychoPy支持它。