【问题标题】:When converting a lxml.objectify.StringElement to a tuple, the individual elements are still strings将 lxml.objectify.StringElement 转换为元组时,各个元素仍然是字符串
【发布时间】:2020-03-21 23:06:38
【问题描述】:

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

【问题讨论】:

  • 你......你就在那儿
  • 问题中的代码只是一个片段。我应该能够复制、粘贴和运行代码而无需更改。我不能这样做。究竟如何创建 lxml.objectify.StringElement 对象? XML 文件在哪里?可以仅使用 lxml 重现问题还是我需要安装 pykml?
  • 它是如何解析的,无法共享或重做 XML。我认为从第一行就很清楚这就是问题所在
  • 为什么问题被标记为“xml”?这和 lxml.objectify 有什么关系?

标签: python xml kml


【解决方案1】:

使用列表理解结束:

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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2017-08-25
    • 1970-01-01
    • 2016-03-14
    • 2019-03-09
    • 2012-01-19
    相关资源
    最近更新 更多