leggere un file CSV e convertirlo in JSON

import csv
import json

# Leggi il CSV e converti in JSON
def csv_to_json(csv_file, json_file):
    data = []

    # Apri e leggi il file CSV
    with open(csv_file, 'r', encoding='utf-8') as file:
        csv_reader = csv.DictReader(file)

        # Converti ogni riga in un dizionario
        for row in csv_reader:
            data.append(row)

    # Scrivi il JSON
    with open(json_file, 'w', encoding='utf-8') as file:
        json.dump(data, file, indent=2, ensure_ascii=False)

    print(f"✅ Conversione completata: {len(data)} record")

# Utilizzo
csv_to_json('dati.csv', 'dati.json')

Esempio pratico

Se hai un file studenti.csv:

nome,età,corso
Marco,22,Informatica
Sara,21,Matematica
Luca,23,Fisica

Il risultato in studenti.json sarà:

[
  {
    "nome": "Marco",
    "età": "22",
    "corso": "Informatica"
  },
  {
    "nome": "Sara",
    "età": "21",
    "corso": "Matematica"
  },
  {
    "nome": "Luca",
    "età": "23",
    "corso": "Fisica"
  }
]

Versione con pandas (più semplice)

import pandas as pd

# Leggi CSV e converti in JSON
df = pd.read_csv('dati.csv')
df.to_json('dati.json', orient='records', indent=2, force_ascii=False)

Processo inverso: come convertire un file JSON in CSV

import json
import csv

# Converti JSON in CSV
def json_to_csv(json_file, csv_file):
    # Leggi il file JSON
    with open(json_file, 'r', encoding='utf-8') as file:
        data = json.load(file)

    # Scrivi il CSV
    with open(csv_file, 'w', newline='', encoding='utf-8') as file:
        # Usa le chiavi del primo elemento come intestazioni
        writer = csv.DictWriter(file, fieldnames=data[0].keys())
        writer.writeheader()
        writer.writerows(data)

    print(f"✅ Conversione completata: {len(data)} record")

# Utilizzo
json_to_csv('dati.json', 'dati.csv')

Esempio pratico

Se hai un file studenti.json:

[
  {
    "nome": "Marco",
    "età": "22",
    "corso": "Informatica"
  },
  {
    "nome": "Sara",
    "età": "21",
    "corso": "Matematica"
  }
]

Il risultato in studenti.csv sarà:

nome,età,corso
Marco,22,Informatica
Sara,21,Matematica

Versione con pandas (più semplice)

import pandas as pd

# Leggi JSON e converti in CSV
df = pd.read_json('dati.json')
df.to_csv('dati.csv', index=False, encoding='utf-8')

Gestione errori

def json_to_csv_safe(json_file, csv_file):
    try:
        with open(json_file, 'r', encoding='utf-8') as file:
            data = json.load(file)

        if not data:
            print("⚠️ File JSON vuoto")
            return

        with open(csv_file, 'w', newline='', encoding='utf-8') as file:
            writer = csv.DictWriter(file, fieldnames=data[0].keys())
            writer.writeheader()
            writer.writerows(data)

        print(f"✅ Convertiti {len(data)} record")

    except FileNotFoundError:
        print("❌ File JSON non trovato")
    except json.JSONDecodeError:
        print("❌ Errore nel formato JSON")