Search code examples
pythonpandasglobsimplekml

Iterating through directory for all csv files and creating kml for each individual(csv) file and save using file name


import csv
import simplekml
import pandas as pd
import glob

frame = pd.DataFrame()
filelist=glob.glob('/Users/germanportes/Documents/Status_Report/Telework_training/Anomaly_6/files/*.csv')
kml = simplekml.Kml()
for file in filelist:
    a6 =pd.read_csv(file)
    for row in a6:
        kml.newpoint(name=a6['idfa'], description = a6['device_os'],coords = [(a6['longitude'], a6['latitude'])])
kml.save('/Users/germanportes/Documents/Status_Report/Telework_training/Anomaly_6/files/kml/'+str(a6)+'.csv')

i like to save each individual csv as its own kml using the filename


Solution

  • Here you're iterating over the columns instead of the rows and then you pass pandas.Series as columns to kml.newpoint arguments instead of some values. Use DataFrame.apply() to iterate over the dataframe rows and add a point per each row to your kml object as follows:

    from os.path import join
    from glob import iglob
    from pathlib import Path
    
    import simplekml
    import pandas as pd
    
    csv_dir = 'path/to/csv/directory'
    kml_dir = 'path/to/kml/directory'
    
    for file in iglob(join(csv_dir, '*.csv')):
        # read the csv file
        df = pd.read_csv(file)
        # make an empty kml object
        kml = simplekml.Kml()
        # iterate over the rows and and add new points to kml
        df.apply(lambda x: kml.newpoint(name=x['idfa'], description = x['device_os'], coords=[(x['longitude'], x['latitude'])]), axis=1)
        # save it as kml with the csv filename
        kml.save(join(kml_dir, '{}.kml'.format(Path(file).stem)))