Aneu amb compte quan llegiu un csv amb una coma seguida d’un espai a Python

Negocis

A Python, podeu llegir i escriure fitxers csv fàcilment mitjançant el mòdul csv estàndard.

Per exemple, suposem que teniu el següent csv, sample.csv.

11,12,13,14
21,22,23,24
31,32,33,34

Això es pot llegir de la següent manera.

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']

El que heu de tenir en compte aquí és quan hi ha un espai després de la coma. Normalment, no hi hauria d’haver espais innecessaris després de la coma, però de vegades veig fitxers amb espais.

En aquests casos, per defecte, els espais en blanc no s’ignoren i el fitxer es llegeix tal qual.

11, 12, 13, 14
21, 22, 23, 24
31, 32, 33, 34

En altres paraules, si llegiu el fitxer anterior amb una coma seguida d’un espai, la sortida serà la següent

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']

Si especifiqueu el següent a csv.reader, els espais després de la coma es saltaran.
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']

En un exemple senzill com l’anterior, podeu utilitzar strip() per eliminar l’espai en blanc. El problema és quan està envoltat de cometes dobles com la següent.

"one,one", "two,two", "three,three"

La part envoltada de cometes dobles s’ha de considerar com un únic element, però si skipinitialspace=False (el valor predeterminat), es veurà com el següent.

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"']

Això es pot fer configurant 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']

El mateix passa quan es llegeix un fitxer csv amb read_csv() a pandas. Si el fitxer csv té un espai després de la coma, podeu fer el següent.
read_csv(skipinitialspace=True)

Copied title and URL