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

Python 如何高效地访问hdf5文件(或任何文件),python,hdf5,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 ever

我有一个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\u cache
decorator,那么程序将为每个数据库加载文件10次


通过仅加载一次文件并确保在读取hdf5文件后关闭该文件,获取数据库的有效方法是什么。

您可以将打开的文件存储为全局文件:

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

这将仅在第一次访问时打开它一次(尽管该文件将在程序的整个生命周期内保持打开状态)。不过要小心使用globals——如果使用过度,它们会让生活变得困难。

为什么不直接使用
pd.HDFStore
?@avigil你是什么意思?每次我需要它时?它已经作为一个函数,因此您可以使用
语法来打开和关闭。如果您在多个地点使用它,可能不太实用,谢谢。问题是,如果我的程序中有错误,那么我必须手动关闭hdf5文件。在开发过程中让生活变得有点困难……您只需要在可能有挂起的写入的情况下手动关闭,但希望您能将代码中的这些位置正确隔离开来!:)