Будьте обережні, читаючи csv з комою, а потім пробілом у Python

Бізнес

У Python ви можете легко читати та записувати файли csv за допомогою стандартного модуля csv.

Наприклад, припустимо, що у вас є такий файл csv, sample.csv.

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

Це можна прочитати так.

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

Тут потрібно бути обережним, коли після коми є пробіл. Зазвичай після коми не повинно бути зайвих пробілів, але іноді я бачу файли з пробілами.

У таких випадках за замовчуванням пробіли не ігноруються, а файл читається як є.

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

Іншими словами, якщо ви читаєте наведений вище файл із комою, а потім пробілом, результат буде таким:

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, пробіли після коми будуть пропущені.
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']

У простому прикладі, як наведений вище, ви можете використовувати strip(), щоб видалити пробіл. Проблема полягає в тому, що він оточений подвійними лапками, як показано нижче.

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

Частина, оточена подвійними лапками, повинна розглядатися як один елемент, але якщо skipinitialspace=False (за замовчуванням), вона буде виглядати так.

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

Це можна зробити, встановивши 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']

Те саме стосується читання файлу csv за допомогою read_csv() у pandas. Якщо у файлі csv є пробіл після коми, ви можете зробити наступне.
read_csv(skipinitialspace=True)