Tabella dei contenuti: Mostra/Chiudi

Cos'è un file CSV

Un file CSV(Comma Separated Values) è tra i formati più diffusi per immagazzinare dati tabellari e vengono usati principalmente per gestire una grande mole di dati.

Gli elementi del csv sono separati da un carattere specifico, il più comune è la ,(virgola). Ecco un esempio di come si presenta un file csv:

Nome,Anni,Nazione
Antonio,20,Italia
Marta,25,Inghilterra

Come si può notare da questo esempio solitamente la prima riga rappresenta le colonne della nostra tabella, mentre le righe successive rappresentano i valori rispettivamente separati dalla ,:

Come leggere un file CSV

La pratica più comune per interagire con un file csv in python è quella di utilizzare la libreria omonima. Partiamo subito importandola nel nostro script: import csv.

Per leggere il contenuto del nostro file possiamo utilizzare il metodo csv.reader() in questo modo:

leggi-csv.py:

import csv

with open('test.csv''r'as file:
reader = csv.reader(file)
for row in reader:
print(row)

Output:

['Nome', 'Anni', 'Nazione']
['Antonio', '20', 'Italia']
['Mary', '25', 'Inghilterra']

Nel caso in cui il nostro file .csv usi come delimitatore un carattere diverso dalla virgola, dobbiamo specificarlo passando un secondo parametro al metodo csv.reader(). Questo parametro si chiama delimiter e di default è valorizzato con la ,:

utenti.csv

username;nome;password;abilitato
bargigio;andrea;banana;true
barslengo;lorenzo;abc;false
alambrauto;luca;qwerty;true

leggi-utenti.py

import csv

with open('utenti.csv''r'as file:
    reader = csv.reader(filedelimiter=";")
    for row in reader:
        print(row)

Inoltre, chiamando il metodo csv.DictReader() al posto del csv.reader(), otteniamo il contenuto del csv in un dizionario:

leggi-utenti.py

import csv

with open('utenti.csv''r'as file:
    reader = csv.DictReader(filedelimiter=";")
    for row in reader:
        print(row)

Output

{'username': 'bargigio', 'nome': 'andrea', 'password': 'banana', 'abilitato': 'true'}
{'username': 'barslengo', 'nome': 'lorenzo', 'password': 'abc', 'abilitato': 'false'}
{'username': 'alambrauto', 'nome': 'luca', 'password': 'qwerty', 'abilitato': 'true'}

Come scrivere su un file CSV

Per scrivere un file csv in python possiamo usare il metodo write_row() dell'oggetto writer, che recuperiamo chiamando il metodo csv.writer():

scrivi-csv.py:

import csv

with open('framework.csv''w'newline=''as file:
    writer = csv.writer(file)
    writer.writerow(["Nome""Linguaggio""Utilizzo(%)"])
    writer.writerow(["Django""Python"40])
    writer.writerow(["Blazor""C#"20])
    writer.writerow(["NodeJS""Javascript"60])

Ora riprendiamo lo script che abbiamo scritto in precedenza per leggere il file, cambiamo il nome del csv con quello che abbiamo appena generato ed eseguiamolo per vedere il risultato:

Output:

['Nome', 'Linguaggio', 'Utilizzo(%)']
['Django', 'Python', '40']
['Blazor', 'C#', '20']
['NodeJS', 'Javascript', '60']

Come per la lettura, anche nella scrittura possiamo definire il carattere delimitatore nel metodo csv.writer(file, delimiter=";").

Usando il metodo csv.DictWriter() possiamo creare un csv da un dizionario in questo modo:

import csv
with open('framework_dict.csv'mode='w'newline=''as csv_file:
    colonne = ['Nome''Linguaggio''Utilizzo(%)']
    writer = csv.DictWriter(csv_file, fieldnames=colonne)

    writer.writeheader()
    writer.writerow({'Nome''Django''Linguaggio''Python''Utilizzo(%)'40})
    writer.writerow({'Nome''Blazor''Linguaggio''C#''Utilizzo(%)'20})
    writer.writerow({'Nome''NodeJS''Linguaggio''Javascript''Utilizzo(%)'60})

Tieni a mente che in questo caso è necessario definire le colonne che si vogliono utilizzare.

Conclusione

Se vuoi approfondire le varie funzionalità di questa libreria per interagire con i file csv in python, ti invito a consultare la documentazione ufficiale qui: CSV File Reading and Writing Python 3.9.1 documentation.


Condividi sui Social