我有一个csv单元格值row[13]
,其中包含以下文字:POINT (174.29635 -41.60557)
我需要删除文本和括号,并将两个数字转换为float,每个数字都分配给var: -
geo_pair = row[13].replace("POINT (", "")
geo_pair = geo_pair.replace(")", "")
self.longitude, self.latitude = geo_pair.split(" ")
self.longitude, self.latitude = float(self.longitude), float(self.latitude)
我很确定有一种更清洁的方法可以做到这一点,我想知道一个人知道他们在做什么会做什么!
答案 0 :(得分:4)
由于格式是固定的,由前缀,数据和后缀组成,我会使用切片来删除前缀和后缀:map(float, s[7:-1].split())
。
同时这很简单:
>>> s = "POINT (174.29635 -41.60557)"
>>> longitude, latitude = map(float, s[7:-1].split())
这也适用于符号更改或小数位数更改时。
顺便说一句,只要你没有解析大量的输入,选择哪种方式并不重要。这主要是品味问题,在您的情况下很可能不是性能关键。因此,不要花太多时间: - )。
答案 1 :(得分:3)
使用正则表达式?
>>> map(float, re.search(r'\((.*)\)', s).group(1).split())
[174.29635, -41.60557]
>>>
答案 2 :(得分:2)
这个怎么样?
>>> a, b = map(float, row.translate(None, "POINT()").split())
>>> a
174.29635
>>> b
-41.60557
,其中
row = "POINT (174.29635 -41.60557)"
答案 3 :(得分:1)
我使用split(sep1, 1)[-1].split(sep2, 1)[0]
:
geo_pair = row[13].split("POINT (", 1)[-1].split(")", 1)[0]
self.longitude, self.latitude = map(float, geo_pair.split())