如何有效地访问hdf5文件(或任何文件)

时间:2018-05-17 15:41:33

标签: python hdf5

我有一个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文件。

1 个答案:

答案 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

这只会在首次访问时打开一次(尽管文件将在程序的生命周期内保持打开状态)。尽管如此使用全局变量 - 如果过度使用它们会使生活变得困难。