Автоматически кэшировать файлы, прочитанные пандами в блокноте jupyter?

#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 документы и решите, какого размера вы хотите, чтобы кэш был. Вам нужно будет реализовать код для определения того, когда файл был изменен в последний раз