Convertire csv in xml è un’esigenza comune, con questo breve script in python è semplicissimo.
import csv
import xml.etree.ElementTree as ET
from xml.dom.minidom import parse, parseString
def csv_to_xml(csv_file_path, xml_file_path):
# Apri il file CSV in lettura
with open(csv_file_path, 'r') as csv_file:
# Leggi i dati dal file CSV
csv_reader = csv.reader(csv_file)
headers = next(csv_reader) # Assume che la prima riga sia l'intestazione
data = list(csv_reader)
# Crea un elemento radice per l'XML
root = ET.Element("data")
c = 0
# Itera sui dati e crea gli elementi XML
for row in data:
record = ET.SubElement(root, "record")
c=c+1
# Aggiungi un attributo "id" incrementale ed eventuali altri attributi
# In questo caso aggiungiamo anche un model per generare dati utilizzabili nel software ERP odoo #
record.set("id", "map_id_"+str(c))
record.set("model", "res.region.province.mapping")
for i in range(len(headers)):
field = ET.SubElement(record, headers[i])
field.text = row[i]
# Crea l'albero XML
tree = ET.ElementTree(root)
# Scrivi l'albero XML nel file XML
with open(xml_file_path, 'wb') as xml_file:
tree.write(xml_file, encoding='utf-8', xml_declaration=True)
# Leggi il file XML appena creato e riscrivilo con indentazione per renderlo più leggibile con prettyxml
with open(xml_file_path, 'r') as xml_file:
content = xml_file.read()
content = parseString(content).toprettyxml(indent=" ")
with open(xml_file_path, 'w') as xml_file:
xml_file.write(content)
# Esempio di utilizzo
csv_file_path = 'province.csv' # Sostituisci con il percorso del tuo file CSV
xml_file_path = 'xmloutput.xml' # Sostituisci con il percorso desiderato per il file XML
csv_to_xml(csv_file_path, xml_file_path)
Se non avete confidenza con python e non sapete come eseguire questo script potete vedere questo link per eseguire un programma python da windows oppure chiedere a chatgpt ! 🙂