使用 pyKML 解析 KML 文件
Parsing KML file using pyKML
我正在学习如何使用 pyKML 模块解析 Python 中的 KML 文件。我正在使用的特定文件可以在 here 中找到,我也将其添加到此 post 的底部。我已将文件保存在我的计算机上并将其命名为 test.kml
.
经过一些研究,我设法提取了 test.kml
文件的特定部分并将结果保存到 DataFrame 中。这是我的代码:
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
循环中添加以下行但没有成功。
for pm in folder.Placemark:
plnm1 = pm.name
val1 = pm.ExtendedData.holeNumber.value
plnm.append(plnm1.text)
val.append(val1.text)
我不确定如何访问该特定节点的值。我正在寻找的结果 DataFrame 如下:
| name | holeNumber |
|-------------|------------|
| Club house | 1 |
| By the lake | 5 |
如有任何帮助,我们将不胜感激。
<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>
这是解析 KML 的快速方法。
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)
或者
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)
输出:
name holeNumber
0 Club house 1
1 By the lake 5
我正在学习如何使用 pyKML 模块解析 Python 中的 KML 文件。我正在使用的特定文件可以在 here 中找到,我也将其添加到此 post 的底部。我已将文件保存在我的计算机上并将其命名为 test.kml
.
经过一些研究,我设法提取了 test.kml
文件的特定部分并将结果保存到 DataFrame 中。这是我的代码:
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
循环中添加以下行但没有成功。
for pm in folder.Placemark:
plnm1 = pm.name
val1 = pm.ExtendedData.holeNumber.value
plnm.append(plnm1.text)
val.append(val1.text)
我不确定如何访问该特定节点的值。我正在寻找的结果 DataFrame 如下:
| name | holeNumber |
|-------------|------------|
| Club house | 1 |
| By the lake | 5 |
如有任何帮助,我们将不胜感激。
<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>
这是解析 KML 的快速方法。
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)
或者
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)
输出:
name holeNumber
0 Club house 1
1 By the lake 5