Эффективно хранить динамический CSV-файл в Python: фрейм данных или словарь?Python

Программы на Python
Anonymous
Эффективно хранить динамический CSV-файл в Python: фрейм данных или словарь?

Сообщение Anonymous »

У меня есть следующий CSV-файл, в котором хранится состав различных корзин с продуктами: СЕМЕНКОВЫЕ ФРУКТЫ, КОСТОЧНЫЕ ФРУКТЫ, ФРУКТЫ. Как вы можете видеть ниже, в корзине может находиться еще одна корзина (корзина «ФРУКТЫ» содержит 2 единицы корзины «СЕКОНОВЫЕ ФРУКТЫ» и 1 единицу корзины «КОСТОЧНЫЕ ФРУКТЫ»)

Код: Выделить всё

NAMES,QUANTITY

POME FRUITS,
APPLE,100
PEAR,200

STONE FRUITS,
APRICOT,50

FRUITS,
STONE FRUITS,1
POME FRUITS,2
Затем у меня есть еще один файл CSV, в котором хранится динамика цены каждого компонента первого файла CSV:

Код: Выделить всё

NAME,PRICE

AAPLE,2
PEAR,3
APRICOT,1
PEAR,4
Я хотел бы вычислять стоимость каждой корзины первого файла CSV каждый раз, когда меняется цена одного из его составляющих. Таким образом, результат должен выглядеть так:

Код: Выделить всё

NAMES,VALUE

AAPLE,2
PEAR,3
POME FRUITS,800
APRICOT,1
STONE FRUITS,50
FRUITS,850
PEAR,4
POME FRUITS,1000
FRUITS,1050
Для CSV-файла с составом корзины я создал древовидную структуру и сохранил ее в кадре данных столбцов
«Категория», «Составные элементы», «Количество» как ниже

Код: Выделить всё

Category       Constituents    Quantity
POME FRUITS    APPLE           100
POME FRUITS    PEAR            200
STONE FRUITS   APRICOT         50
FRUITS         STONE FRUITS     1
FRUITS         POME FRUITS      2
Есть ли более эффективный способ сохранить исходный CSV-файл, учитывая, что он может содержать тысячи строк?
Чтобы обновить значения моей корзины с определенной частотой я полностью перечитываю CSV-файл с ценами и каждый раз восстанавливаю его в кадре данных.
Но я боюсь эффективности, потому что цены будут становиться все больше и больше.
1. Как я могу прочитать только новую строку в CSV-файле цен (т. е. второй CSV-файл) и, таким образом, избежать чтения всего CSV-файла каждый раз, когда цена компонента меняется?
Кроме того, я хочу избежать вычисления стоимости корзин КОСТОЧНЫЕ ФРУКТЫ и СЕМЯКОВЫЕ ФРУКТЫ, каждый раз мне придется вычислять стоимость корзины ФРУКТЫ. Я хотел бы просто использовать уже вычисленные значения косточковых и семечковых фруктов.
Поэтому я создаю словарь, который сообщает мне, является ли компонент простым фруктом или корзиной фруктов. Например

Код: Выделить всё

{'APPLE': 'fruit',
'PEAR': 'fruit',
'APRICOT ': 'fruit',
'POME FRUITS': 'basket',
'STONE FRUITS': 'basket',
'FRUITS': 'basket',
}
и для каждого обновления просто пересчитываю значения элементов в моем словаре и сохраняю их как второе значение, связанное с моим ключом, как показано ниже

Код: Выделить всё

{'APPLE': ('fruit',2),
'PEAR': ('fruit',3),
'APRICOT ': ('fruit',1),
'POME FRUITS': ('basket',800),
'STONE FRUITS': ('basket',50),
'FRUITS': ('basket',850)
}
Проблема в том, что я бы не хотел хранить значение корзины «ФРУКТЫ», поскольку это просто сумма корзин «КОСТОЧНЫЕ ФРУКТЫ» и «СЕМКОНОВЫЕ ФРУКТЫ». Но тогда для каждой корзины - в моей большой корзине CSV - которая будет включать корзину "ФРУКТЫ", мне придется подсчитывать сумму, и я думаю, что это может быть неэффективно,
С другой стороны, если мне придется хранить значение каждой корзины A, с которой я столкнулся, а затем получать это значение из словаря каждый раз, когда оно мне нужно для вычисления стоимости каждой корзины B, включая корзину A, размер моего словаря будет слишком большим, и я боюсь, что это может быть проблемой с памятью.
2. Знаете ли вы эффективный способ (по скорости и времени) справиться с такими данными?
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/783 ... dictionary

Вернуться в «Python»