Berhati-hati semasa membaca csv dengan koma diikuti dengan ruang dalam Python

Perniagaan

Dalam Python, anda boleh membaca dan menulis fail csv dengan mudah menggunakan modul csv standard.

Sebagai contoh, katakan anda mempunyai csv berikut, sample.csv.

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

Ini boleh dibaca seperti berikut.

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

Apa yang anda perlu berhati-hati di sini ialah apabila terdapat ruang selepas koma. Biasanya, tiada ruang yang tidak perlu selepas koma, tetapi kadangkala saya melihat fail dengan ruang di dalamnya.

Dalam kes sedemikian, secara lalai, ruang kosong tidak diabaikan dan fail dibaca sebagaimana adanya.

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

Dalam erti kata lain, jika anda membaca fail di atas dengan koma diikuti dengan ruang, output akan menjadi seperti berikut

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

Jika anda menentukan perkara berikut dalam csv.reader, ruang selepas koma akan dilangkau.
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']

Dalam contoh mudah seperti di atas, anda boleh menggunakan strip() untuk mengalih keluar ruang putih. Masalahnya apabila ia dikelilingi oleh tanda petikan berganda seperti berikut.

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

Bahagian yang dikelilingi oleh tanda petikan berganda hendaklah dianggap sebagai satu elemen, tetapi jika skipinitialspace=False (lalai), ia akan kelihatan seperti berikut.

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

Ini boleh dilakukan dengan menetapkan 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']

Perkara yang sama berlaku apabila membaca fail csv dengan read_csv() dalam panda. Jika fail csv mempunyai ruang selepas koma, anda boleh melakukan perkara berikut.
read_csv(skipinitialspace=True)

Copied title and URL