我有一个hdf5文件,其中包含我在不同地方(不同模块)的项目中需要的大约10个数据库。
目前我使用的是一个简单的函数,它将为我提供我想要的数据库:
def get_hdf5_dataframe(dataframe_name: str) -> pd.DataFrame:
db = pd.HDFStore("/database.h5")
df = db[dataframe_name]
db.close() # needs to be closed every time I access it
return df
但是,由于程序每次都必须加载文件,因此效率不高。
如果我使用lru_cache
装饰器,那么程序将为每个数据库加载文件10次。
通过仅加载文件一次来获取数据库的有效方法是什么,并确保在阅读后关闭hdf5文件。
答案 0 :(得分:1)
您可以将打开的文件存储为全局:
db = None
def get_hdf5_dataframe(dataframe_name: str) -> pd.DataFrame:
global db
if db is None:
db = pd.HDFStore("/database.h5")
df = db[dataframe_name]
return df
这只会在首次访问时打开一次(尽管文件将在程序的生命周期内保持打开状态)。尽管如此使用全局变量 - 如果过度使用它们会使生活变得困难。