Budite pažljivi kada čitate csv sa zarezom iza kojeg sledi razmak u Python-u

Бусинесс

U Python-u možete lako čitati i pisati csv datoteke koristeći standardni csv modul.

Na primer, pretpostavimo da imate sledeći csv, sample.csv.

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

Ovo se može pročitati na sledeći način.

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

Ono na šta ovde treba da vodite računa je kada postoji razmak iza zareza. Obično ne bi trebalo da bude nepotrebnih razmaka posle zareza, ali ponekad vidim datoteke sa razmacima u njima.

U takvim slučajevima, podrazumevano, razmak se ne zanemaruje i datoteka se čita onakva kakva jeste.

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

Drugim rečima, ako pročitate gornju datoteku sa zarezom praćenom razmakom, izlaz će biti sledeći

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

Ako navedete sledeće u csv.reader-u, razmaci posle zareza će biti preskočeni.
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']

U jednostavnom primeru poput onog iznad, možete koristiti strip() da uklonite razmak. Problem je kada je okružen dvostrukim navodnicima kao što je sledeći.

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

Deo okružen dvostrukim navodnicima treba posmatrati kao jedan element, ali ako je skipinitialspace=False (podrazumevano), izgledaće ovako.

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

Ovo se može uraditi postavljanjem 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']

Isto važi i kada čitate csv datoteku sa read_csv() u pandama. Ako csv datoteka ima razmak posle zareza, možete da uradite sledeće.
read_csv(skipinitialspace=True)

Copied title and URL