将lxml.objectify.StringElement转换为元组时,各个元素仍然是字符串

问题描述 投票:0回答:1

我从使用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库战斗之后,我决定采用这种怪异的方法,并尝试自己对其进行格式化,以使其像这样来创建形状良好的多边形:

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,所以这是我唯一能想到的方法,现在我迷路了。任何帮助将不胜感激,谢谢!

python xml kml
1个回答
0
投票

使用列表理解结束:

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]]
© www.soinside.com 2019 - 2024. All rights reserved.