Zachowaj ostrożność podczas czytania csv z przecinkiem, po którym następuje spacja w Pythonie

Biznes

W Pythonie można łatwo odczytywać i zapisywać pliki csv za pomocą standardowego modułu csv.

Na przykład, załóżmy, że masz następujący plik csv, sample.csv.

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

Można to odczytać w następujący sposób.

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

To, na co musisz uważać, to spacja po przecinku. Normalnie, nie powinno być żadnych zbędnych spacji po przecinku, ale czasami widzę pliki, w których są spacje.

W takich przypadkach, domyślnie, białe znaki nie są ignorowane i plik jest czytany w takiej postaci, w jakiej jest.

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

Innymi słowy, jeśli przeczytasz powyższy plik z przecinkiem, po którym następuje spacja, wyjście będzie wyglądało następująco

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

Jeśli w pliku csv.reader podasz następujące wartości, spacje po przecinku zostaną pominięte.
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']

W prostym przykładzie, jak ten powyżej, możesz użyć strip() do usunięcia białych znaków. Problem pojawia się, gdy jest on otoczony podwójnymi cudzysłowami, jak w poniższym przykładzie.

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

Część otoczona cudzysłowami powinna być traktowana jako pojedynczy element, ale jeśli skipinitialspace=False (domyślnie), będzie to wyglądało jak poniżej.

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

Można to zrobić ustawiając 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']

To samo jest prawdziwe podczas czytania pliku csv za pomocą read_csv() w pandas. Jeśli plik csv ma spację po przecinku, możesz wykonać następujące czynności.
read_csv(skipinitialspace=True)

Copied title and URL