import xml.etree.ElementTree as ET import json def make_placemark(name, desc, lat, lon): placemark_el = ET.Element("Placemark") name_el = ET.Element("name") name_el.text = name placemark_el.append(name_el) description_el = ET.Element("description") description_el.text = desc placemark_el.append(description_el) point_el = ET.Element("Point") coordinates_el = ET.Element("coordinates") coordinates_el.text = str(lon) + ',' + str(lat) + ',0' point_el.append(coordinates_el) placemark_el.append(point_el) return placemark_el def json2html(jj): tbl = r'' # if isinstance(jj, dict): for key, value in jj.items(): if isinstance(value, dict) or isinstance(value, list): tbl += '' else: tbl += '' elif isinstance(jj, list): for ell in jj: tbl += '' # tbl += '
' + str(key) + '' + json2html(value) + '
' + str(key) + '' + str(value) + '
' + json2html(ell) + '
' return tbl ET.register_namespace("", "http://www.opengis.net/kml/2.2") el = ET.XML(r'') doc = ET.Element("Document") # file_directory = r'C:\work1\crash_region_code_1165.json' json_data=open(file_directory, 'r', encoding="utf-8").read() str1 = json_data.split('\n') for n in str1: if n != '': data = json.loads(n) geo_code = data['geo_code'] doc.append(make_placemark(data['_id']['$oid'], json2html(data), geo_code['latitude'], geo_code['longitude'])) el.append(doc) et = ET.ElementTree(el) et.write(r'C:\work1\test22.kml', encoding='UTF-8', xml_declaration=True)