Python тілінде үтірден кейін бос орын бар csv файлын оқығанда абай болыңыз

Іскерлік

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

Пандаларда read_csv() арқылы csv файлын оқығанда да солай. Егер csv файлында үтірден кейін бос орын болса, келесі әрекеттерді орындауға болады.
read_csv(skipinitialspace=True)