大多数Pythonic方式实现这4行?

时间:2013-07-24 08:56:47

标签: python text

我有一个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)

我很确定有一种更清洁的方法可以做到这一点,我想知道一个人知道他们在做什么会做什么!

4 个答案:

答案 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())