Подтвердить что ты не робот

Правильный Python Parse CSV

Я очень новичок в Python. Я хочу проанализировать файл csv таким образом, чтобы он распознавал цитируемые значения - например,

1997, Ford, E350, "Супер, роскошный грузовик"

следует разделить как

('1997', 'Ford', 'E350', 'Супер, роскошный грузовик')

и NOT

('1997', 'Ford', 'E350', '' Super ',' luxury truck '')

выше, это то, что я получаю, если я использую что-то вроде str.split(,).

Как мне это сделать? Также было бы лучше сохранить эти значения в массиве или какой-либо другой структуре данных? потому что после того, как я получу эти значения из csv, я хочу иметь возможность легко выбирать, скажем, любые два столбца и хранить его как другой массив или какую-либо другую структуру данных.

4b9b3361

Ответ 1

Следующий метод отлично работал

d = {}
d['column1name'] = []
d['column2name'] = []
d['column3name'] = []

dictReader = csv.DictReader(open('filename.csv', 'rb'), fieldnames = ['column1name', 'column2name', 'column3name'], delimiter = ',', quotechar = '"')

for row in dictReader:
    for key in row:
        d[key].append(row[key])

Столбцы хранятся в словаре с именами столбцов в качестве ключа.

Ответ 2

Вы должны использовать модуль csv:

import csv
reader = csv.reader(['1997,Ford,E350,"Super, luxurious truck"'], skipinitialspace=True)
for r in reader:
    print r

выход:

['1997', 'Ford', 'E350', 'Super, luxurious truck']

Ответ 3

Вы должны определить doublequote как quotechar в инструкции csv.reader():

>>> with open(r'<path_to_csv_test_file>') as csv_file:
...     reader = csv.reader(csv_file, delimiter=',', quotechar='"')
...     print(reader.next())
... 
['1997', 'Ford', 'E350', 'Super, luxurious truck']
>>> 

Ответ 4

Если вы не хотите использовать CSV-модуль, вам нужно использовать регулярное выражение. Попробуйте следующее:

import re
array = re.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", '1997,Ford,E350,"Super, luxurious truck"')

Если вы попытаетесь:

print(array[3])

вы получите:

"Super, luxurious truck"