首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pyKML解析KML文件

使用pyKML解析KML文件
EN

Stack Overflow用户
提问于 2020-03-16 21:31:58
回答 1查看 3.6K关注 0票数 0

我正在学习如何使用pyKML模块解析Python中的KML文件。我正在使用的特定文件可以找到这里,我还在文章的底部添加了它。我已将文件保存在我的计算机上,并将其命名为test.kml

经过一些研究,我成功地提取了test.kml文件的一个特定部分,并将结果保存到一个DataFrame中。这是我的密码:

代码语言:javascript
复制
from pykml import parser
import pandas as pd

filename = 'test.kml'
with open(filename) as fobj:
    folder = parser.parse(fobj).getroot().Document

plnm = []

for pm in folder.Placemark:
    plnm1 = pm.name
    plnm.append(plnm1.text)

df = pd.DataFrame()
df['name'] = plnm

print(df)
          name
0   Club house
1  By the lake

我想在我的DataFrame中添加一个与"holeNumber"值相对应的新列。我尝试在我的for循环中添加以下行,但没有成功。

代码语言:javascript
复制
for pm in folder.Placemark:
    plnm1 = pm.name
    val1 = pm.ExtendedData.holeNumber.value
    plnm.append(plnm1.text)
    val.append(val1.text)

我不知道如何访问该特定节点的值。我正在寻找的结果DataFrame如下:

代码语言:javascript
复制
| name        | holeNumber |
|-------------|------------|
| Club house  | 1          |
| By the lake | 5          |

任何帮助都将不胜感激。

代码语言:javascript
复制
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <name>My Golf Course Example</name>
  <Placemark>
    <name>Club house</name>
    <ExtendedData>
      <Data name="holeNumber">
        <value>1</value>
      </Data>
      <Data name="holeYardage">
        <value>234</value>
      </Data>
      <Data name="holePar">
        <value>4</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.956,33.5043</coordinates>
    </Point>
  </Placemark>
  <Placemark>
    <name>By the lake</name>
    <ExtendedData>
      <Data name="holeNumber">
        <value>5</value>
      </Data>
      <Data name="holeYardage">
        <value>523</value>
      </Data>
      <Data name="holePar">
        <value>5</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.95,33.5024</coordinates>
    </Point>
  </Placemark>
</Document>
</kml>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 22:36:46

下面是解析KML的快速方法。

代码语言:javascript
复制
plnm = []
holeNumber = []
for pm in folder.Placemark:
    plnm1 = pm.name
    val1 = pm.ExtendedData.Data[0].value
    plnm.append(plnm1.text)
    holeNumber.append(val1.text)

df = pd.DataFrame()
df['name'] = plnm
df['holeNumber'] = holeNumber

print(df)

代码语言:javascript
复制
df = pd.DataFrame(columns=('name', 'holeNumber'))
for pm in folder.Placemark:
    name = pm.name.text
    value = pm.ExtendedData.Data[0].value.text
    df = df.append({ 'name' : name, 'holeNumber' : value }, ignore_index=True)
print(df)

输出:

代码语言:javascript
复制
          name holeNumber
0   Club house          1
1  By the lake          5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60713482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档