import json import datetime import msgpack from inspect import getmembers, isfunction ONE = 'QM4TW2136314' TWO = 'QMFME2004132' def convert_to_entry(x): i = json.loads(x) date_parts = i['date'].split('-') return {'country_code': i['country_code'], 'date': datetime.date(int(date_parts[0]), int(date_parts[1]), int(date_parts[2])), 'streams': i['streams'], 'streams_with_skips': i['streams_with_skips'], 'skips': i['skips'], 'saves': i['saves']} def load(isrc): with open(isrc + '.txt', 'r') as f: all_records = f.readline(); streams = list(map(convert_to_entry, all_records.split(';'))) return streams def decode_datetime(obj): if '__date__' in obj: date_parts = obj['as_str'].split('-') obj = datetime.date(int(date_parts[0]), int(date_parts[1]), int(date_parts[2])) return obj def encode_datetime(obj): if isinstance(obj, datetime.date): return {'__date__': True, 'as_str': obj.strftime("%Y-%m-%d")} return obj if __name__ == "__main__": streams = load(TWO) packb = msgpack.packb(streams, default=encode_datetime) print(f'type {type(packb)}') reloaded = msgpack.unpackb(packb, object_hook=decode_datetime) print(reloaded==streams)