Бъдете внимателни, когато четете 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)

Copied title and URL