如何修复ValueError:无法将字符串转换为float

时间:2019-10-01 15:27:01

标签: python

我有以下字符串:

p = 'GEOM ((55.23 21.74, 55.26 21.74, 55.26 21.71829, 55.23 21.71, 55.23 21.74))'

我需要将每个坐标转换为浮点数,如下所示:

arr = p.replace("GEOM ((", "").replace("))", "").split(",")
for i in arr:
  print(float(i.split(" ")[0]))

问题是float(...)操作返回错误ValueError: could not convert string to float:

2 个答案:

答案 0 :(得分:0)

如果您明确告诉split()使用空格字符,则会意外地创建包含两个以上元素的拆分,而这并不是您想要的。您可以不带任何参数调用split(),也可以在拆分之前在字符串上调用strip()

for i in arr:
    i.split()[0]
for i in arr:
    i.strip().split(" ")[0]

两者都应该起作用。

如果您想变得超强健,可以将strip()partition()结合使用:

for i in arr:
    i.strip().partition(' ')[0]

答案 1 :(得分:0)

您似乎有某种Well-Known-Text (WKT)字符串。 如果是这种情况,您可以使用shapely之类的库将字符串直接读取到易于操作的对象中。

但是,看来GEOM不是有效的WKT类型。如果假设它是多边形,则可以将GEOM更改为POLYGON,并将其作为 wkt 加载到Polygon对象中,并提供各种可用的辅助方法:

>>> from shapely import wkt
>>> g = 'GEOM ((55.23 21.74, 55.26 21.74, 55.26 21.71829, 55.23 21.71, 55.23 21.74))'
>>> p = g.replace('GEOM', 'POLYGON')
>>> poly = wkt.loads(p)
>>> list(poly.exterior.coords)
[(55.23, 21.74), (55.26, 21.74), (55.26, 21.71829), (55.23, 21.71), (55.23, 21.74)]