Crear kml desde csv en Python

Soy nuevo en Python. Estoy trabajando en archivos gps. Necesito convertir un archivo CSV que tenga todos los datos gps en un archivo kml. A continuación se muestra el código en python que estoy usando:

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("\n") f.write("\n") f.write("\n") f.write(" " + fname + '.kml' +"\n") for row in data: f.write(" \n") f.write(" " + str(row[1]) + "\n") f.write(" " + str(row[0]) + "\n") f.write(" \n") f.write(" " + str(row[3]) + "," + str(row[2]) + "," + str(row[4]) + "\n") f.write(" \n") f.write(" \n") f.write("\n") f.write("\n") print "File Created. " print "Press ENTER to exit. " raw_input() 

El archivo csv que estoy usando está disponible aquí: dip12Sep11newEdited.csv El archivo kml generado está disponible aquí: csv2kml.kml Pero el archivo kml no se crea correctamente. Aparentemente, después de algunas filas en el csv, el código no puede generar más marcas de posición. No es capaz de iterar. Puede verlo desplazándose a la última parte del archivo kml generado.

¿Alguien me puede ayudar a descubrir el error en el código, porque para algunos archivos csv más pequeños funcionó correctamente y creó archivos kml completamente?

Gracias.

    No respondiste a la consulta anterior, pero supongo que el error es que no estás cerrando el archivo de salida (lo que podría vaciar tu salida).

     f.close() 

    usa etree para crear tu archivo

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

    Se incluye con Python y lo protege contra la generación de XML roto. (por ejemplo, porque fname contenía & , que tiene un significado especial en XML).

    Este paquete simplekml funciona muy bien y facilita el trabajo de tales cosas.

    Para instalar en Ubuntu, descargue la última versión y ejecute lo siguiente desde el directorio que contiene el contenido del archivo.

     sudo python setup.py install 

    También hay algunos tutoriales para comenzar.

    Una respuesta menciona el “etree” , una ventaja de que no tiene que codificar el formato xml:

    Por debajo de uno de mis ejemplos, por supuesto, debe ajustarlo a su caso, pero puede obtener la idea principal de cómo funciona etree:

    para conseguir algo como esto

       G:\AMSR\GW1AM2_201301010834_032D_L1SGRTBR_1110110_channel89H.csv wkbPoint    

    Puedes usar este código:

     import xml.etree.cElementTree as ET [....] root = ET.Element("OGRVRTDataSource") OGRVRTLayer  = ET.SubElement(root, "OGRVRTLayer") OGRVRTLayer.set("name", AMSRcsv_shortname) SrcDataSource = ET.SubElement(OGRVRTLayer, "SrcDataSource") SrcDataSource.text = AMSRcsv GeometryType = ET.SubElement(OGRVRTLayer, "GeometryType") GeometryType.text = "wkbPoint" GeometryField = ET.SubElement(OGRVRTLayer,"GeometryField") GeometryField.set("encoding", "PointFromColumns") GeometryField.set("x", "lon") GeometryField.set("y", "lat") GeometryField.set("z", "brightness") tree = ET.ElementTree(root) tree.write(AMSRcsv_vrt) 

    También más información aquí

    Este código está bien escrito gracias por la publicación. Lo hice funcionar poniendo mi CSV en el mismo directorio que el código .py.

    Hice algunas ediciones para llevarlo a py 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("\n") f.write("\n") f.write("\n") f.write(" " + fname + '.kml' +"\n") for row in data: f.write(" \n") f.write(" " + str(row[1]) + "\n") f.write(" " + str(row[3]) + "\n") f.write(" \n") f.write(" " + str(row[10]) + "," + str(row[11]) + "," + str() + "\n") f.write(" \n") f.write(" \n") f.write("\n") f.write("\n") print ("File Created. ") print ("Press ENTER to exit. ") input() f.close() 

    Espero que te ayude si estás intentando convertir tus datos.