In Python, potete facilmente leggere e scrivere file csv usando il modulo csv standard.
Per esempio, supponiamo che abbiate il seguente csv, sample.csv.
11,12,13,14
21,22,23,24
31,32,33,34
Questo può essere letto come segue.
import csv
with open('data/src/sample.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']
Quello a cui dovete fare attenzione qui è quando c'è uno spazio dopo la virgola. Normalmente, non ci dovrebbero essere spazi inutili dopo la virgola, ma a volte vedo file con spazi dentro.
In questi casi, per default, gli spazi bianchi non vengono ignorati e il file viene letto così com'è.
11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34
In altre parole, se si legge il file di cui sopra con una virgola seguita da uno spazio, l'output sarà il seguente
with open('data/src/sample_space.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['11', ' 12', ' 13', ' 14']
# ['21', ' 22', ' 23', ' 24']
# ['31', ' 32', ' 33', ' 34']
Se si specifica quanto segue in csv.reader, gli spazi dopo la virgola saranno saltati.skipinitialspace=True
with open('data/src/sample_space.csv', 'r') as f:
reader = csv.reader(f, skipinitialspace=True)
for row in reader:
print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']
In un esempio semplice come quello sopra, potete usare strip() per rimuovere gli spazi bianchi. Il problema è quando è circondato da doppie virgolette come il seguente.
"one,one", "two,two", "three,three"
La parte circondata da doppie virgolette dovrebbe essere considerata come un singolo elemento, ma se skipinitialspace=False (il default), avrà il seguente aspetto.
with open('data/src/sample_double_quotation.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['one,one', ' "two', 'two"', ' "three', 'three"']
Questo può essere fatto impostando skipinitialspace=True.
with open('data/src/sample_double_quotation.csv', 'r') as f:
reader = csv.reader(f, skipinitialspace=True)
for row in reader:
print(row)
# ['one,one', 'two,two', 'three,three']
Lo stesso vale quando si legge un file csv con read_csv() in pandas. Se il file csv ha uno spazio dopo la virgola, potete fare come segue.read_csv(skipinitialspace=True)