Python:Csv到kml的for循环

2024-05-19 01:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,获取一个csv文件,并将csv的每一行写入kml中的placemark。脚本一直工作到第二个for循环,它无法在kml文件中写入placemarks。我知道脚本在编写LookAt之前运行良好,然后似乎跳过for循环。

一点背景。。。csv包含7列,最后一列类似于“纬度;经度;半径”。这就是为什么我有第一个for循环来分割这三个信息位。

这是我到目前为止的情况。

import csv
from Tkinter import *
from tkFileDialog import *

root = Tk()
root.fileName = askopenfilename( filetypes = ( ("Comma Separated Values",     "*.csv"), ("All files", "*.*") ) )
print (root.fileName)
#close tkinter gui window
root.destroy()

#open the csv file
data = csv.reader(open (root.fileName), delimiter = ',')
#skip header row
next(data)

for line in data:
    raw_coordinates = line[6]
    #print raw_coordinates
    lat_long_radius = raw_coordinates.split(';')

#Open the file to be written.
f = open('TPS_Report.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>" + str("TPS_Report") + '.kml' +"</name>\n") # display name of kml file in Google Earth
#Create LookAt for start location at 39,-98 4200km eye alt, 0 tilt
print ("Creating LookAt")
f.write("   <LookAt>\n")
f.write("       <longitude>" + str("-98") + "</longitude>\n")
f.write("       <latitude>" + str("39") + "</latitude>\n")
f.write("       <range>" + str("4200000") + "</range>\n")
f.write("       <tilt>" + str("0") + "</tilt>\n")
f.write("   </LookAt>\n")

for row in data:
    f.write("   <Placemark>\n")
    f.write("       <name>" + lat_long_radius[3] + " meters" + "</name>\n")
    f.write("       <description>" + str(row[0]) + "\n")
    f.write("                    " + str(row[1]) + "\n")
    f.write("                    " + str(row[2]) + "\n")
    f.write("                    " + str(row[3]) + "\n")
    f.write("                    " + str(row[4]) + "\n")
    f.write("                    " + str(row[5]) + "\n")
    f.write("                    " + str(row[6]) + "</description>\n") 
    f.write("       <gx:balloonVisibility>" + str("1") + "</gx:balloonVisibility>\n")
    f.write("       <Point>\n")
    f.write("           <coordinates>" + lat_long_radius[2] + "," + lat_long_radius[1] + "," + str(0) + "</coordinates>\n")
    f.write("       </Point>\n")
    f.write("   </Placemark>\n")

f.write("</Document>\n")
f.write("</kml>\n")
f.close()
print ("File Created. ")
print ("Press ENTER to exit. ")
raw_input()

任何帮助都将不胜感激


Tags: csvnamefordatarawrootkmlfile
1条回答
网友
1楼 · 发布于 2024-05-19 01:46:38

您的data变量不是一个列表,它是一个使用文件的迭代器。一旦你迭代它,你就到达了文件的末尾,任何再次迭代它的尝试都将失败(因为没有更多的内容可供阅读)。在

如果确实需要对文件进行两次迭代,请将内容保存在某处(例如,在列表中)。或者重组你的程序,这样你只需一次就可以完成所有你需要的事情。在

您的代码还存在其他问题,例如lat_long_radius,它对所有点都是相同的值。在

相关问题 更多 >

    热门问题