Skip to content
Snippets Groups Projects
Commit 7f4b4ea4 authored by Alexis GAMELIN's avatar Alexis GAMELIN
Browse files

Add tool to merge hdf5 files

parent fa82907b
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
"""
This module defines utilities functions, helping to deals with tracking output
and hdf5 files.
@author: Alexis Gamelin
"""
import h5py as hp
def merge_files(files_prefix, files_number, file_name=None):
"""
Merge several hdf5 files into one.
The function assumes that the files to merge have names in the follwing
format:
- "files_prefix_0.hdf5"
- "files_prefix_1.hdf5"
...
- "files_prefix_files_number.hdf5"
Parameters
----------
files_prefix : str
Name of the files to merge.
files_number : int
Number of files to merge.
file_name : str, optional
Name of the file with the merged data. If None, files_prefix without
number is used.
"""
if file_name == None:
file_name = files_prefix
f = hp.File(file_name + ".hdf5", "a")
## Create file architecture
f0 = hp.File(files_prefix + "_" + str(0) + ".hdf5", "r")
for group in list(f0):
f.require_group(group)
for dataset_name in list(f0[group]):
shape = f0[group][dataset_name].shape
dtype = f0[group][dataset_name].dtype
shape_needed = list(shape)
shape_needed[-1] = shape_needed[-1]*files_number
shape_needed = tuple(shape_needed)
f[group].create_dataset(dataset_name, shape_needed, dtype)
f0.close()
## Copy data
for i in range(files_number):
fi = hp.File(files_prefix + "_" + str(i) + ".hdf5", "r")
for group in list(fi):
for dataset_name in list(fi[group]):
shape = fi[group][dataset_name].shape
n_slice = int(len(shape) - 1)
length = shape[-1]
slice_list = []
for n in range(n_slice):
slice_list.append(slice(None))
slice_list.append(slice(length*i,length*(i+1)))
if (dataset_name == "time") and (i != 0):
f[group][dataset_name][tuple(slice_list)] = f[group][dataset_name][(length*i) - 1] + fi[group][dataset_name]
else:
f[group][dataset_name][tuple(slice_list)] = fi[group][dataset_name]
fi.close()
f.close()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment