У меня очень большой файл csv (10 gb), и я бы хотел его прочитать и создать список словарей, где каждый словарь представляет собой строку в csv. Что-то вродеСоздание списка словарей из больших csv
[{'value1': '20150302', 'value2': '20150225','value3': '5', 'IS_SHOP': '1', 'value4': '0', 'value5': 'GA321D01H-K12'},
{'value1': '20150302', 'value2': '20150225', 'value3': '1', 'value4': '0', 'value5': '1', 'value6': 'GA321D01H-K12'}]
Я пытаюсь добиться этого с помощью генератора, чтобы избежать каких-либо воспоминаний вопросы, мой текущий код выглядит следующим образом:
def csv_reader():
with open('export.csv') as f:
reader = csv.DictReader(f)
for row in reader:
yield {key: value for key, value in row.items()}
generator = csv_reader()
list = []
for i in generator:
list.append(i)
Проблема заключается в том, что в основном это закончится из-за того, что список становится слишком большим, и процесс убит. Есть ли способ добиться того же результата (список подкатегорий) эффективным способом? Я очень новичок в генераторах/уроках, поэтому я даже не знаю, правильно ли я их использую.
Я также попытался использовать виртуальную среду с pypy, но память все равно сломается (чуть позже).
В основном причина, почему я хочу список словарей, что я хочу, чтобы попытаться преобразовать CSV в Avro формат, используя fastavro поэтому любые намеки на то, как с помощью fastavro (https://pypi.python.org/pypi/fastavro) без создания списка словарей буду оценены
Если вы сохраняете полные результаты работы генератора, вы не сохраняете память. Если цель состоит в том, чтобы обрабатывать файл по строкам, то обрабатывайте его по строкам, не храните его. Кроме того, обратите внимание: 'yield {key: value for key, value in row.items()}' - это просто мелкое копирование 'dict', когда у вас уже есть отличный« dict », просто введите' row row' непосредственно , – ShadowRanger