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 )