Fai attenzione quando leggi un csv con una virgola seguita da uno spazio in Python

Attività commerciale

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)

Copied title and URL