pyhdf5_handler.tutorial.hdf5_io_tests

  1if __name__ == "__main__":
  2    import numpy as np
  3    import pyhdf5_handler
  4    import datetime
  5    import pandas as pd
  6
  7    # open an hdf5 database, test.hdf5.
  8    hdf5 = pyhdf5_handler.open_hdf5("./test.hdf5")
  9
 10    # Create a group in the hdf5
 11    hdf5 = pyhdf5_handler.add_hdf5_sub_group(hdf5, subgroup="my_group")
 12    hdf5["my_group"]
 13
 14    # save any data in the hdf5 database
 15    pyhdf5_handler.hdf5_dataset_creator(hdf5, "str", "str")
 16    pyhdf5_handler.hdf5_dataset_creator(hdf5, "numbers", 1.0)
 17    pyhdf5_handler.hdf5_dataset_creator(hdf5, "none", None)
 18    pyhdf5_handler.hdf5_dataset_creator(
 19        hdf5, "timestamp_numpy", np.datetime64("2019-09-22T17:38:30")
 20    )
 21    pyhdf5_handler.hdf5_dataset_creator(
 22        hdf5, "timestamp_datetime", datetime.datetime.fromisoformat("2019-09-22T17:38:30")
 23    )
 24    pyhdf5_handler.hdf5_dataset_creator(
 25        hdf5, "timestamp_pandas", pd.Timestamp("2019-09-22T17:38:30")
 26    )
 27    pyhdf5_handler.hdf5_dataset_creator(hdf5, "list_num", [1.0, 2.0])
 28    pyhdf5_handler.hdf5_dataset_creator(hdf5, "list_str", ["a", "b"])
 29    pyhdf5_handler.hdf5_dataset_creator(hdf5, "list_mixte", [1.0, "a"])
 30    pyhdf5_handler.hdf5_dataset_creator(
 31        hdf5,
 32        "list_date_numpy",
 33        [np.datetime64("2019-09-22 17:38:30"), np.datetime64("2019-09-22 18:38:30")],
 34    )
 35    pyhdf5_handler.hdf5_dataset_creator(
 36        hdf5,
 37        "list_date_datetime",
 38        [
 39            datetime.datetime.fromisoformat("2019-09-22 17:38:30"),
 40            datetime.datetime.fromisoformat("2019-09-22T18:38:30"),
 41        ],
 42    )
 43    pyhdf5_handler.hdf5_dataset_creator(
 44        hdf5,
 45        "list_date_pandas",
 46        [pd.Timestamp("2019-09-22 17:38:30"), pd.Timestamp("2019-09-22 17:38:30")],
 47    )
 48    pyhdf5_handler.hdf5_dataset_creator(
 49        hdf5, "list_date_range_pandas", pd.date_range(start="1/1/2018", end="1/08/2018")
 50    )
 51
 52    # write a python dictionary in the hdf5 database
 53    dictionary = {
 54        "dict": {
 55            "int": 1,
 56            "float": 2.0,
 57            "none": None,
 58            "timestamp": pd.Timestamp("2019-09-22 17:38:30"),
 59            "list": [1, 2, 3, 4],
 60            "array": np.array([1, 2, 3, 4]),
 61            "date_range": pd.date_range(start="1/1/2018", end="1/08/2018"),
 62            "list_mixte": [1.0, np.datetime64("2019-09-22 17:38:30")],
 63        }
 64    }
 65
 66    hdf5.attrs["attribute"] = "myattribute"
 67
 68    pyhdf5_handler.save_dict_to_hdf5(hdf5, dictionary)
 69
 70    # handle structured ndarray
 71    data = [("Alice", 25, 55.0), ("Bob", 32, 60.5)]
 72    dtypes = [("name", "U10"), ("age", "i4"), ("weight", "f4")]
 73    people = np.array(data, dtype=dtypes)
 74
 75    pyhdf5_handler.hdf5_dataset_creator(hdf5, "structured_array", people)
 76
 77    # viewing data stored in the hdf5 (recursive)
 78    pyhdf5_handler.hdf5_view(hdf5)
 79    pyhdf5_handler.hdf5file_view("./test.hdf5")
 80
 81    # viwing element stored in the hdf5 (at the current level)
 82    pyhdf5_handler.hdf5_ls(hdf5)
 83
 84    # read an hdf5 and import it as a python dictionary
 85    data = pyhdf5_handler.read_hdf5_as_dict(hdf5, read_attrs=True)
 86
 87    # read a specific item
 88    pyhdf5_handler.hdf5_read_dataset(item=hdf5["str"], expected_type=hdf5.attrs["_str"])
 89    pyhdf5_handler.hdf5_read_dataset(
 90        item=hdf5["list_date_numpy"], expected_type=hdf5.attrs["_list_date_numpy"]
 91    )
 92
 93    # close the hdf5
 94    hdf5.close()
 95
 96    # handle file directly
 97    pyhdf5_handler.hdf5file_ls("./test.hdf5")
 98    pyhdf5_handler.hdf5file_ls("./test.hdf5", location="structured_array")
 99
100    data = pyhdf5_handler.read_hdf5file_as_dict("./test.hdf5", read_attrs=False)
101
102    pyhdf5_handler.save_dict_to_hdf5file("./test.hdf5", data)
103
104    res = pyhdf5_handler.search_in_hdf5file(
105        "./test.hdf5", key="date_range", location="./", wait_time=0
106    )
107
108    res = pyhdf5_handler.search_in_hdf5file(
109        "./test.hdf5", key="structured_array", location="./", wait_time=0
110    )
111
112    pyhdf5_handler.get_hdf5file_item(
113        path_to_hdf5="./test.hdf5",
114        location="./",
115        item="structured_array",
116        search_attrs=False,
117    )
118
119    pyhdf5_handler.get_hdf5file_item(
120        path_to_hdf5="./test.hdf5", location="./", item="list_mixte", search_attrs=False
121    )
122
123    pyhdf5_handler.get_hdf5file_item(
124        path_to_hdf5="./test.hdf5", location="./", item="attribute", search_attrs=True
125    )
126
127    pyhdf5_handler.get_hdf5file_attribute(
128        path_to_hdf5="./test.hdf5", location="./", attribute="_list_num", wait_time=0
129    )
130
131    pyhdf5_handler.get_hdf5file_attribute(
132        path_to_hdf5="./test.hdf5",
133        location="./structured_array/ndarray_ds",
134        attribute="_name",
135        wait_time=0,
136    )
137
138    pyhdf5_handler.get_hdf5file_dataset(
139        path_to_hdf5="./test.hdf5", location="./dict", dataset="list_mixte"
140    )