在Python中从CSV创建KML

11 投票
6 回答
21080 浏览
提问于 2025-04-17 02:56

我刚开始学习Python,现在在处理GPS文件。我需要把一个包含所有GPS数据的CSV文件转换成KML文件。下面是我用的Python代码:

import csv
#Input the file name.
fname = raw_input("Enter file name WITHOUT extension: ")
data = csv.reader(open(fname + '.csv'), delimiter = ',')
#Skip the 1st header row.
data.next()
#Open the file to be written.
f = open('csv2kml.kml', 'w')

#Writing the kml file.
f.write("<?xml version='1.0' encoding='UTF-8'?>\n")
f.write("<kml xmlns='http://earth.google.com/kml/2.1'>\n")
f.write("<Document>\n")
f.write("   <name>" + fname + '.kml' +"</name>\n")
for row in data:
    f.write("   <Placemark>\n")
    f.write("       <name>" + str(row[1]) + "</name>\n")
    f.write("       <description>" + str(row[0]) + "</description>\n")
    f.write("       <Point>\n")
    f.write("           <coordinates>" + str(row[3]) + "," + str(row[2]) + "," + str(row[4]) + "</coordinates>\n")
    f.write("       </Point>\n")
    f.write("   </Placemark>\n")
f.write("</Document>\n")
f.write("</kml>\n")
print "File Created. "
print "Press ENTER to exit. "
raw_input()

我使用的CSV文件可以在这里找到:dip12Sep11newEdited.csv。生成的KML文件可以在这里找到:csv2kml.kml。但是KML文件没有正确生成。显然,在CSV文件的某些行之后,代码无法生成更多的标记(Placemarks),也就是无法继续处理下去。你可以通过滚动到生成的KML文件的最后部分来看到这一点。

有没有人能帮我找出代码中的错误?因为对于一些较小的CSV文件,代码是正常工作的,能够完整地生成KML文件。

谢谢。

6 个回答

2

这段代码写得很好,谢谢你的分享。我把我的CSV文件放在和.py代码同一个文件夹里,这样就能正常运行了。

我做了一些修改,让它适应Python 3.3版本。

import csv
#Input the file name."JoeDupes3_forearth"
fname = input("Enter file name WITHOUT extension: ")
data = csv.reader(open(fname + '.csv'), delimiter = ',')
#Skip the 1st header row.
#data.next()
#Open the file to be written.
f = open('csv2kml.kml', 'w')

#Writing the kml file.
f.write("<?xml version='1.0' encoding='UTF-8'?>\n")
f.write("<kml xmlns='http://earth.google.com/kml/2.1'>\n")
f.write("<Document>\n")
f.write("   <name>" + fname + '.kml' +"</name>\n")
for row in data:
    f.write("   <Placemark>\n")
    f.write("       <name>" + str(row[1]) + "</name>\n")
    f.write("       <description>" + str(row[3]) + "</description>\n")
    f.write("       <Point>\n")
    f.write("           <coordinates>" + str(row[10]) + "," + str(row[11]) + "," + str() + "</coordinates>\n")
    f.write("       </Point>\n")
    f.write("   </Placemark>\n")
f.write("</Document>\n")
f.write("</kml>\n")
print ("File Created. ")
print ("Press ENTER to exit. ")
input()
f.close()

希望这对你转换数据有帮助。

4

使用etree来创建你的文件

http://docs.python.org/library/xml.etree.elementtree.html

这个工具是Python自带的,可以帮助你避免生成有问题的XML文件。(比如,如果fname里面包含了&,这个符号在XML中有特殊的含义。)

9

你没有回答上面的提问,但我猜测错误的原因是你没有关闭你的输出文件(这样会导致你的输出没有被保存)。

f.close()

撰写回答