我有以下字符串:
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:
。
答案 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)]