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(file, delimiter=";")
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(file, delimiter=";")
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.