Convertire csv in xml

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 ! 🙂