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    import geopandas
  7    import shapely
  8
  9    # open an hdf5 database, test.hdf5.
 10    hdf5 = pyhdf5_handler.open_hdf5("./test.hdf5")
 11
 12    # Create a group in the hdf5
 13    hdf5 = pyhdf5_handler.add_hdf5_sub_group(hdf5, subgroup="my_group")
 14    hdf5["my_group"]
 15
 16    # save any data in the hdf5 database
 17    pyhdf5_handler.hdf5_dataset_creator(hdf5, "str", "str")
 18    pyhdf5_handler.hdf5_dataset_creator(hdf5, "numbers", 1.0)
 19    pyhdf5_handler.hdf5_dataset_creator(hdf5, "numpy_numbers", np.float64(1.0))
 20    pyhdf5_handler.hdf5_dataset_creator(hdf5, "none", None)
 21    pyhdf5_handler.hdf5_dataset_creator(
 22        hdf5, "timestamp_numpy", np.datetime64("2019-09-22T17:38:30")
 23    )
 24    pyhdf5_handler.hdf5_dataset_creator(
 25        hdf5, "timestamp_datetime", datetime.datetime.fromisoformat("2019-09-22T17:38:30")
 26    )
 27    pyhdf5_handler.hdf5_dataset_creator(
 28        hdf5, "timestamp_pandas", pd.Timestamp("2019-09-22T17:38:30")
 29    )
 30    pyhdf5_handler.hdf5_dataset_creator(hdf5, "list_num", [1.0, 2.0])
 31    pyhdf5_handler.hdf5_dataset_creator(hdf5, "list_str", ["a", "b"])
 32    pyhdf5_handler.hdf5_dataset_creator(hdf5, "list_mixte", [1.0, "a"])
 33    pyhdf5_handler.hdf5_dataset_creator(
 34        hdf5,
 35        "list_date_numpy",
 36        [np.datetime64("2019-09-22 17:38:30"), np.datetime64("2019-09-22 18:38:30")],
 37    )
 38    pyhdf5_handler.hdf5_dataset_creator(
 39        hdf5,
 40        "list_date_datetime",
 41        [
 42            datetime.datetime.fromisoformat("2019-09-22 17:38:30"),
 43            datetime.datetime.fromisoformat("2019-09-22T18:38:30"),
 44        ],
 45    )
 46    pyhdf5_handler.hdf5_dataset_creator(
 47        hdf5,
 48        "list_date_pandas",
 49        [pd.Timestamp("2019-09-22 17:38:30"), pd.Timestamp("2019-09-22 17:38:30")],
 50    )
 51    pyhdf5_handler.hdf5_dataset_creator(
 52        hdf5, "list_date_range_pandas", pd.date_range(start="1/1/2018", end="1/08/2018")
 53    )
 54
 55    # write a python dictionary in the hdf5 database
 56    dictionary = {
 57        "dict": {
 58            "int": 1,
 59            "float": 2.0,
 60            "none": None,
 61            "timestamp": pd.Timestamp("2019-09-22 17:38:30"),
 62            "list": [1, 2, 3, 4],
 63            "array": np.array([1, 2, 3, 4]),
 64            "date_range": pd.date_range(start="1/1/2018", end="1/08/2018"),
 65            "list_mixte": [1.0, np.datetime64("2019-09-22 17:38:30")],
 66        }
 67    }
 68
 69    hdf5.attrs["attribute"] = "myattribute"
 70
 71    pyhdf5_handler.save_dict_to_hdf5(hdf5, dictionary)
 72
 73    # handle structured ndarray
 74    data = [("Alice", 25, 55.0), ("Bob", 32, 60.5)]
 75    dtypes = [("name", "U10"), ("age", "i4"), ("weight", "f4")]
 76    people = np.array(data, dtype=dtypes)
 77
 78    pyhdf5_handler.hdf5_dataset_creator(hdf5, "structured_array", people)
 79
 80    # viewing data stored in the hdf5 (recursive)
 81    pyhdf5_handler.hdf5_view(hdf5)
 82    pyhdf5_handler.hdf5file_view("./test.hdf5")
 83
 84    # viwing element stored in the hdf5 (at the current level)
 85    pyhdf5_handler.hdf5_ls(hdf5)
 86
 87    # read an hdf5 and import it as a python dictionary
 88    data = pyhdf5_handler.read_hdf5_as_dict(hdf5, read_attrs=True)
 89
 90    # read a specific item
 91    pyhdf5_handler.hdf5_read_dataset(item=hdf5["str"], expected_type=hdf5.attrs["_str"])
 92    pyhdf5_handler.hdf5_read_dataset(
 93        item=hdf5["numpy_numbers"], expected_type=hdf5.attrs["_numpy_numbers"]
 94    )
 95    pyhdf5_handler.hdf5_read_dataset(
 96        item=hdf5["numbers"], expected_type=hdf5.attrs["_numbers"]
 97    )
 98    pyhdf5_handler.hdf5_read_dataset(
 99        item=hdf5["list_date_numpy"], expected_type=hdf5.attrs["_list_date_numpy"]
100    )
101
102    # close the hdf5
103    hdf5.close()
104
105    # handle file directly
106    pyhdf5_handler.hdf5file_ls("./test.hdf5")
107    pyhdf5_handler.hdf5file_ls("./test.hdf5", location="structured_array")
108
109    data = pyhdf5_handler.read_hdf5file_as_dict("./test.hdf5", read_attrs=False)
110
111    pyhdf5_handler.save_dict_to_hdf5file("./test.hdf5", data)
112
113    # complex class with exluded datatype
114    pyhdf5_handler.EXCLUDE_PYTHON_OBJ.append("numpy")  # exclude numpy also
115    mydict = {
116        "g": geopandas.GeoDataFrame(),
117        "s": shapely.Polygon(),
118        "n_exclude": np.zeros(0),
119    }
120    pyhdf5_handler.save_dict_to_hdf5file("./test.hdf5", mydict)
121    pyhdf5_handler.get_hdf5file_item(
122        path_to_hdf5="./test.hdf5",
123        location="./",
124        item="g",
125        search_attrs=False,
126    )
127    pyhdf5_handler.get_hdf5file_item(
128        path_to_hdf5="./test.hdf5",
129        location="./",
130        item="s",
131        search_attrs=False,
132    )
133    pyhdf5_handler.get_hdf5file_item(
134        path_to_hdf5="./test.hdf5",
135        location="./",
136        item="n_exclude",
137        search_attrs=False,
138    )
139    pyhdf5_handler.EXCLUDE_PYTHON_OBJ.remove("numpy")
140
141    res = pyhdf5_handler.search_in_hdf5file(
142        "./test.hdf5", key="date_range", location="./", wait_time=0
143    )
144
145    res = pyhdf5_handler.search_in_hdf5file(
146        "./test.hdf5", key="structured_array", location="./", wait_time=0
147    )
148
149    pyhdf5_handler.get_hdf5file_item(
150        path_to_hdf5="./test.hdf5",
151        location="./",
152        item="structured_array",
153        search_attrs=False,
154    )
155
156    pyhdf5_handler.get_hdf5file_item(
157        path_to_hdf5="./test.hdf5", location="./", item="list_mixte", search_attrs=False
158    )
159
160    pyhdf5_handler.get_hdf5file_item(
161        path_to_hdf5="./test.hdf5", location="./", item="attribute", search_attrs=True
162    )
163
164    pyhdf5_handler.get_hdf5file_attribute(
165        path_to_hdf5="./test.hdf5", location="./", attribute="_list_num", wait_time=0
166    )
167
168    pyhdf5_handler.get_hdf5file_attribute(
169        path_to_hdf5="./test.hdf5",
170        location="./structured_array/ndarray_ds",
171        attribute="_name",
172        wait_time=0,
173    )
174
175    pyhdf5_handler.get_hdf5file_dataset(
176        path_to_hdf5="./test.hdf5", location="./dict", dataset="list_mixte"
177    )