У меня есть файл .csv, который выглядит примерно так:
1,2,"a,b",3
4,"c,d",5,6
Который я читаю и сохраняю в массиве следующим образом:
with open(filename, 'r') as f:
data = f.readlines()
data = [line.split(',') for line in data]
Что приводит к такому массиву:
[['1','2','"a','b"','3']['4','"c','d"','5','6']]
ОДНАКО, я хотел бы сохранить элементы в двойных кавычках, таких как «a, b», в одном элементе массива данных (именно так они открываются в Excel), например:
[[1,2,'a,b',3][4,'c,d',5,6]]
Есть ли простой способ добиться этого в Python?
Обновлено: желательно без использования модуля csv, если это возможно?
Или вы также можете реализовать свой собственный парсер
@dcg Я пытался не использовать это, чтобы все было чисто и просто, но если это единственный способ...
Я думаю, проще использовать csv
, чем делать это самому
Использование модуля csv
, который является частью стандартной библиотеки, действительно лучший выбор. Он прост в использовании (см. мой ответ, использующий его ниже), и вы можете быть уверены, что все возможные проблемы, такие как эта, цитирование и т. д., были правильно решены и что вы не столкнетесь с ошибкой в какой-то крайний случай.
Вы должны использовать модуль csv
:
import csv
with open('test.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)
Выход:
['1', '2', 'a,b', '3']
['4', 'c,d', '5', '6']
Или, если вы не хотите лениво читать строки и хотите, чтобы все они были в одном списке, как в вашем вопросе, вы можете просто сделать:
with open('test.csv') as f:
reader = csv.reader(f)
data = list(reader)
print(data)
# [['1', '2', 'a,b', '3'], ['4', 'c,d', '5', '6']]
Используя модуль csv
:
import csv
with open('test.csv') as file:
reader = csv.reader(file)
data = [row for row in reader]
Вы можете использовать модуль
csv