Seien Sie vorsichtig, wenn Sie eine csv-Datei mit einem Komma gefolgt von einem Leerzeichen in Python lesen

Geschäft

In Python können Sie csv-Dateien mit dem standardmäßigen csv-Modul problemlos lesen und schreiben.

Nehmen wir zum Beispiel an, Sie haben die folgende csv-Datei sample.csv.

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

Dies kann wie folgt gelesen werden.

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

Worauf Sie hier achten müssen, ist ein Leerzeichen nach dem Komma. Normalerweise sollte es keine unnötigen Leerzeichen nach dem Komma geben, aber manchmal sehe ich Dateien mit Leerzeichen.

In solchen Fällen werden Leerzeichen standardmäßig nicht ignoriert und die Datei wird so gelesen, wie sie ist.

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

Mit anderen Worten, wenn Sie die obige Datei mit einem Komma gefolgt von einem Leerzeichen lesen, wird die Ausgabe wie folgt aussehen

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

Wenn Sie in csv.reader Folgendes angeben, werden die Leerzeichen nach dem Komma übersprungen.
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 einem einfachen Beispiel wie dem obigen können Sie strip() verwenden, um die Leerzeichen zu entfernen. Das Problem ist, wenn es von doppelten Anführungszeichen umgeben ist, wie im folgenden Beispiel.

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

Der Teil, der von doppelten Anführungszeichen umgeben ist, sollte als einzelnes Element betrachtet werden, aber wenn skipinitialspace=False (die Standardeinstellung), sieht es wie folgt aus.

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

Dies kann durch die Einstellung skipinitialspace=True erreicht werden.

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

Dasselbe gilt für das Lesen einer csv-Datei mit read_csv() in Pandas. Wenn die csv-Datei ein Leerzeichen nach dem Komma hat, können Sie wie folgt vorgehen.
read_csv(skipinitialspace=True)