openpyxl:此模块依赖于库来读取和写入 Excel 文件。确保在环境中安装了 以使用此模块
pip install excel-serializer该模块有四种内置类型:
import excel_serializer as esdata = {'name': 'John', 'age': 30, 'city': 'New York'}es.dump(data, 'data.xlsx')import excel_serializer as esdata = es.load('data.xlsx')print(data)# Output: {'name': 'John', 'age': 30, 'city': 'New York'}import excel_serializer as esclass CustomEncoder(es.ExcelEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return super()._default(obj)data = {'numbers': {1, 2, 3}}es.dump(data, 'data.xlsx', cls=CustomEncoder)也可以实现自定义编码器来处理自定义对象的序列化:
import excel_serializer as esclass CustomEncoder(es.ExcelEncoder): def write_set(self, sheet, type_cell, st): cols = ('Value',) type_cell.value = f'Set {type_cell.value}' sheet.append((type_cell,)) sheet.append(cols) for i, e in enumerate(st): sheet.append((i + 1, self.encode(sheet, i + 3, 2, str(i + 1), e))) return 2 + len(st), 1, cols def write_custom_type(self, sheet, type_cell, obj): if isinstance(obj, set): return self.write_set(sheet, type_cell, obj) return super().write_custom_type(sheet, type_cell, obj)data = {'numbers': {1, 2, 3}}es.dump(data, 'data.xlsx', cls=CustomEncoder)import excel_serializer as esclass CustomDecoder(es.ExcelDecoder): def read_set(self, sheet_name, rows): headers = next(rows) if len(headers) != 1: raise es.ExcelDecodeError(f'Invalid list headers. Expected 1, found {len(headers)}', self.workbook, sheet_name, 2, len(headers) + 1) if headers[0].value != 'Value': raise es.ExcelDecodeError(f'Invalid list headers. Expected "Value", found "{headers[0].value}"', self.workbook, sheet_name, 2, 1) return set(self.read_value(row[0]) for row in rows) def read_custom_type(self, sheet_type, sheet_name, rows): if sheet_type == 'Set': return self.read_set(sheet_name, rows) return super().read_custom_type(sheet_type, sheet_name, rows)data = es.load('data.xlsx', cls=CustomDecoder)print(data)# Output: {'numbers': {1, 2, 3}}长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等 推荐阅读
DBOS:让 Python 工作流持久化,轻松应对中断与重试
不想折腾 Celery?试试这个轻量级 Django 异步任务方案
点击 阅读原文 了解更多