Vær forsigtig, når du læser en csv med et komma efterfulgt af et mellemrum i Python

Forretning

I Python kan du nemt læse og skrive csv-filer ved hjælp af standardmodulet csv.

Antag f.eks., at du har følgende csv, sample.csv.

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

Dette kan læses som følger.

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

Du skal være opmærksom på, når der er et mellemrum efter kommaet. Normalt bør der ikke være unødvendige mellemrum efter kommaet, men nogle gange ser jeg filer med mellemrum i dem.

I sådanne tilfælde ignoreres der som standard ikke mellemrum, og filen læses som den er.

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

Med andre ord, hvis du læser ovenstående fil med et komma efterfulgt af et mellemrum, vil resultatet være som følger

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

Hvis du angiver følgende i csv.reader, vil mellemrummene efter kommaet blive sprunget over.
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']

I et simpelt eksempel som det ovenstående kan du bruge strip() til at fjerne mellemrum. Problemet er, når det er omgivet af dobbelte anførselstegn som i følgende tilfælde.

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

Den del, der er omgivet af dobbelte anførselstegn, skal betragtes som et enkelt element, men hvis skipinitialspace=False (standardindstillingen), vil det se ud som følgende.

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

Dette kan gøres ved at indstille 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']

Det samme gælder, når du læser en csv-fil med read_csv() i pandas. Hvis csv-filen har et mellemrum efter kommaet, kan du gøre følgende.
read_csv(skipinitialspace=True)

Copied title and URL