Close an open h5py data file

pytables (which h5py uses) keeps track of all open files and provides an easy method to force-close all open hdf5 files.

import tables
tables.file._open_files.close_all()

That attribute _open_files also has helpful methods to give you information and handlers for the open files.


This is how it could be done (I could not figure out how to check for closed-ness of the file without exceptions, maybe you will find):

import gc
for obj in gc.get_objects():   # Browse through ALL objects
    if isinstance(obj, h5py.File):   # Just HDF5 files
        try:
            obj.close()
        except:
            pass # Was already closed

Another idea:

Dpending how you use the files, what about using the context manager and the with keyword like this?

with h5py.File("some_path.h5") as f:
   f["data1"] = some_data

When the program flow exits the with-block, the file is closed regardless of what happens, including exceptions etc.