0

我有一个 csv 单元格值,row[13]其中包含以下文本:POINT (174.29635 -41.60557)

我需要去掉文本和括号,并将两个数字转换为浮点数,每个数字都分配给一个 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

4 回答 4

4

由于格式是固定的,由前缀、数据和后缀组成,我会使用切片来删除前缀和后缀:map(float, s[7:-1].split())

这既清晰又简单:

>>> s = "POINT (174.29635 -41.60557)"
>>> longitude, latitude = map(float, s[7:-1].split())

这也适用于符号更改或小数位数更改时。

顺便说一句,只要您不解析大量输入,选择哪种方式并不重要。这主要是一个品味问题,在你的情况下很可能不是性能关键。所以不要花太多时间在这个上:-)。

于 2013-07-24T09:04:33.813 回答
3

使用正则表达式?

>>> map(float, re.search(r'\((.*)\)', s).group(1).split())
[174.29635, -41.60557]
>>> 
于 2013-07-24T09:01:17.320 回答
2

这个怎么样?

>>> a, b = map(float, row.translate(None, "POINT()").split())
>>> a
174.29635
>>> b
-41.60557

在哪里

row = "POINT (174.29635 -41.60557)"
于 2013-07-24T08:59:56.897 回答
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())
于 2013-07-24T08:59:58.737 回答