Source code for oasislmf.pytools.converters.csvtobin.utils.complex_items
import msgpack
import numpy as np
import struct
from oasislmf.pytools.common.data import resolve_file
from oasislmf.pytools.converters.data import TOOL_INFO
import pandas as pd
[docs]
def complex_items_tobin(stack, file_in, file_out, file_type):
header_dtype = TOOL_INFO[file_type]["dtype"]
file_in = resolve_file(file_in, "r", stack)
s = struct.Struct('IIII') # Matches dtype from complex_items_meta_output
try:
items_df = pd.read_csv(file_in)
except pd.errors.EmptyDataError:
np.empty(0, dtype=header_dtype).tofile(file_out)
return
for row in items_df.itertuples():
# item_id,coverage_id,model_data,group_id
packed_model_data = msgpack.packb(row.model_data)
values = (
int(row.item_id),
int(row.coverage_id),
int(float(row.group_id)),
len(packed_model_data)
)
packed_data = s.pack(*values)
file_out.write(packed_data)
file_out.write(packed_model_data)