#python #pandas #jupyter
Вопрос:
У меня есть некоторые функции, которые включают чтение данных с диска ( data = pandas.read_table('my_data.txt')
). Когда я вызываю ячейки, которые считываются в этих файлах, это может быть медленным. Иногда базовые файлы не изменились, поэтому повторное чтение файла-пустая трата времени.
Было бы здорово иметь возможность автоматически кэшировать все прочитанные файлы, чтобы они хранились в памяти для более быстрого извлечения. Если файл изменился (например, проверив, что время изменения больше, чем время кэширования), он будет прочитан снова. В противном случае он просто извлек бы содержимое из памяти.
Каков наилучший способ достичь этого?
Комментарии:
1. Вы не можете, чтобы память была изменчивой, вот почему компьютерные боги изобрели диск
2. @itprorh66 действительно, любой файл должен быть прочитан по крайней мере один раз при каждом (повторном)запуске ядра, но если ячейка выполняется повторно и базовый файл не изменился, то вполне возможно получить кэшированную версию в памяти
Ответ №1:
Что — то вроде этого должно сработать
from functools import lru_cache import pandas as pd def _get_time_last_modified(filepath): # filepath is string # returns pandas.Timestamp @lru_cache def _get_file(filepath, timestamp): return pd.read_table(filepath) def get_file(filepath): time_last_modified = _get_time_last_modified(filepath).value # convert to int as lru_cache needs hashable params return _get_file(filepath, time_last_modified)
Взгляните на lru_cache
документы и решите, какого размера вы хотите, чтобы кэш был. Вам нужно будет реализовать код для определения того, когда файл был изменен в последний раз