python - 将 lxml.objectify.StringElement 转换为元组时,各个元素仍然是字符串
问题描述
我有一个来自使用 pykml 解析的 kml 的 lxml.objectify.StringElement。解析如下:
with open('btgdbgdgnh.kml') as f:
documento = parser.parse(f).getroot().Document
d = {}
for p in documento.Folder:
d[p.name] = {}
for place in p.Placemark:
d[p.name][place.name] = []
for pol in place.MultiGeometry.Polygon:
d[p.name[place.name].append(pol.outerBoundaryIs.LinearRing.coordinates)
这样解析的输出如下:
'\n -0.458304,38.368177,0\n -0.458486,38.368272,0\n -0.458679,38.36836,0\n
在与几个 kml 库进行了斗争之后,我决定采用 hacky 的方式并尝试自己对其进行格式化,以便将其提供给它以创建像这样的形状多边形:
s='\n -0.458304,38.368177,0\n -0.458486,38.368272,0\n -0.458679,38.36836,0\n
s = s.replace('0\n','0)|(')
s = s.replace('\n','(')
s = " ".join(s.split())
s = s.split('|')
呈现此输出:
['( -0.458304,38.368177,0)',
'( -0.458486,38.368272,0)',
'( -0.465878,38.368924,0)',
'( -0.468405,38.368941,0)',
'( -0.472423,38.369025,0)']
而且我无法将里面的内容转换为简单的元组。我尝试了 ast 库,但似乎已弃用(?),numpy 数组,它看起来像这样最“pythonic”:
results = np.fromstring(s, dtype=int, sep='|')
但返回一个空数组。我从一开始的解决方案似乎不是一个很好的解决方案,但我是第一次使用 pykml,所以这是我能想到的唯一方法,现在我迷路了。任何帮助将不胜感激,谢谢!
解决方案
使用列表理解结束:
s=str(d['erveg']['dbgbtn'])
s = " ".join(s.split())
po = [tuple(float(j) for j in i.split(",")) for i in s.split()[1:-2]]
推荐阅读
- google-cloud-platform - 如何使用 terraform 更新 GCP Buckets ACL?
- java - java循环不增加数组索引
- if-statement - 脚本如果然后在两张纸之间匹配
- sharepoint - Sharepoint 2013 - 全部展开/折叠所有分组列表
- c# - 如何在 asp.net Core 中创建主详细信息页面
- ormlite-servicestack - ServiceStack ORMLite:带有表别名的多列 GroupBy
- swift - 不能在不可变值上使用变异成员:“子视图”是一个只能获取的属性
- git - VS Code:在拉取请求之前查看 git 远程更改?
- javascript - 如何访问 promise 返回的值?
- python - 如何获得感染区域的准确百分比?