Python’da virgül ve ardından boşluk içeren bir csv okurken dikkatli olun

Python’da standart csv modülünü kullanarak csv dosyalarını kolayca okuyabilir ve yazabilirsiniz.

Örneğin, şu csv’ye (örnek.csv) sahip olduğunuzu varsayalım.

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

Bu aşağıdaki gibi okunabilir.

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

Burada dikkat etmeniz gereken nokta virgülden sonra boşluk bırakılmasıdır. Normalde virgülden sonra gereksiz boşluk olmamalı ama bazen içinde boşluk olan dosyalar görüyorum.

Bu gibi durumlarda, varsayılan olarak boşluk göz ardı edilmez ve dosya olduğu gibi okunur.

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

Yani yukarıdaki dosyayı bir virgül ve ardından bir boşluk bırakarak okursanız çıktısı aşağıdaki gibi olacaktır.

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

csv.reader’da aşağıdakileri belirtirseniz virgülden sonraki boşluklar atlanır.
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']

Yukarıdaki gibi basit bir örnekte, boşlukları kaldırmak için strip() kullanabilirsiniz. Sorun, aşağıdaki gibi çift tırnak işaretleri içine alınmasıdır.

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

Çift tırnak içine alınmış kısım tek bir eleman olarak kabul edilmelidir, ancak eğer skipinitialspace=False (varsayılan) ise aşağıdaki gibi görünecektir.

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

Bu, skipinitialspace=True ayarlanarak yapılabilir.

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

Aynı şey pandalarda read_csv() ile bir csv dosyası okurken de geçerlidir. csv dosyasında virgülden sonra boşluk varsa aşağıdakileri yapabilirsiniz.
read_csv(skipinitialspace=True)