import csv
import os
import glob
from xml.dom import minidom
import xml.etree.ElementTree as ET
rootElement = "dataroot"
csv.register_dialect('custom',
delimiter=',',
doublequote=True,
escapechar=None,
quotechar='"',
quoting=csv.QUOTE_MINIMAL,
skipinitialspace=False)
files = glob.glob("*.csv")
for fileName in files:
baseFileName, fileExtension = os.path.splitext(fileName)
recordElement = baseFileName
with open(fileName) as ifile:
data = csv.reader(ifile, dialect='custom')
header = next(data, None)
xmlFile = ET.Element(rootElement)
for record in data:
r = ET.SubElement(xmlFile, recordElement)
for i, field in enumerate(record):
ET.SubElement(r, header[i].replace(' ', '-')).text = field
tree = ET.ElementTree(xmlFile)
tree.write("xml/" + baseFileName + ".xml")
rough_string = ET.tostring(xmlFile, 'utf-8')
reparsed = minidom.parseString(rough_string)
with open("xml/" + baseFileName + ".xml", 'w') as fh:
fh.write(reparsed.toprettyxml(indent=" "))