Правильный Python Parse CSV
Я очень новичок в Python. Я хочу проанализировать файл csv таким образом, чтобы он распознавал цитируемые значения - например,
1997, Ford, E350, "Супер, роскошный грузовик"
следует разделить как
('1997', 'Ford', 'E350', 'Супер, роскошный грузовик')
и NOT
('1997', 'Ford', 'E350', '' Super ',' luxury truck '')
выше, это то, что я получаю, если я использую что-то вроде str.split(,)
.
Как мне это сделать?
Также было бы лучше сохранить эти значения в массиве или какой-либо другой структуре данных? потому что после того, как я получу эти значения из csv, я хочу иметь возможность легко выбирать, скажем, любые два столбца и хранить его как другой массив или какую-либо другую структуру данных.
Ответы
Ответ 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"