Var försiktig när du läser en csv med ett kommatecken följt av ett mellanslag i Python.

Företag

I Python kan du enkelt läsa och skriva csv-filer med hjälp av standardmodulen csv.

Anta till exempel att du har följande csv, sample.csv.

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

Detta kan läsas på följande sätt.

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

Vad du måste vara försiktig med här är när det finns ett mellanslag efter kommatecken. Normalt ska det inte finnas några onödiga mellanslag efter kommatecken, men ibland ser jag filer med mellanslag i dem.

I sådana fall ignoreras som standard inte vitrymder och filen läses som den är.

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

Med andra ord, om du läser ovanstående fil med ett kommatecken följt av ett mellanslag, kommer resultatet att se ut på följande sätt

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

Om du anger följande i csv.reader kommer mellanslag efter kommatecken att hoppas över.
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 ett enkelt exempel som det ovan kan du använda strip() för att ta bort vitrymden. Problemet är när det är omgivet av dubbla citattecken, som i följande fall.

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

Den del som är omgiven av dubbla citattecken ska betraktas som ett enda element, men om skipinitialspace=False (standard) kommer det att se ut på följande sätt.

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

Detta kan göras genom att ställa in 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']

Samma sak gäller när du läser en csv-fil med read_csv() i pandas. Om csv-filen har ett mellanslag efter kommatecken kan du göra följande.
read_csv(skipinitialspace=True)

Copied title and URL