Будзьце ўважлівыя пры чытанні 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)