У меня есть имя заголовка столбца из серии массивных CSV-файлов с более чем 50 полями. Для всех файлов индекс нужного мне столбца не всегда одинаков.
Я написал код, который находит порядковый номер столбца в каждом файле. Теперь я хотел бы добавить только этот столбец в качестве ключа в словаре, где значение подсчитывает количество уникальных строк в этом столбце.
Поскольку эти CSV-файлы имеют большой объем, и я пытаюсь использовать передовые практики для эффективного проектирования данных, я ищу решение, которое использует минимальное количество памяти. Каждое решение, которое я нахожу для записи CSV в словарь, включает в себя запись всех данных из CSV в словарь, и я не думаю, что это необходимо. Похоже, что наилучшее решение предполагает только чтение данных из этого одного столбца и добавление этого столбца к ключу словаря.
Итак, давайте возьмем это как пример данных:
FOODS;CALS
"PIZZA";600
"PIZZA";600
"BURGERS";500
"PIZZA";600
"PASTA";400
"PIZZA";600
"SALAD";100
"CHICKEN WINGS";300
"PIZZA";600
"PIZZA";600
Результат, который я хочу:
food_dict = {'PIZZA': 6, 'PASTA': 1, 'BURGERS': 1, 'SALAD': 1, 'CHICKEN WINGS': 1}
Теперь предположим, что мне нужны данные только из столбца FOODS, и в этом случае я установил значение индекса в качестве переменной food_index.
Вот что я пробовал, проблема в том, что столбцы не всегда находятся в одном и том же месте индекса в разных файлах, поэтому это решение не будет работать:
from itertools import islice
with open(input_data_txt, "r") as file:
# This enables skipping the header line.
skipped = islice(file, 1, None)
for i, line in enumerate(skipped, 2):
try:
food, cals = line.split(";")
except ValueError:
pass
food_dict = {}
if food not in food_dict:
food_dict[food] = 1
else:
food_dict[food] += 1
Это решение работает только для этого образца - но только если я заранее знаю местоположение столбцов - и опять же, напоминание, что у меня более 50 столбцов, а позиция индекса нужного столбца отличается между файлами.
Возможно ли это сделать? Опять же, только встроенные модули - без Pandas, Numpy или других подобных пакетов.