读取CSV全部值存入Python字典、使用DynamoDB的batch_writer()问题求助
问题1:CSV读取存入Python字典异常排查
- 优先使用Python标准库
csv完成读取,逻辑更可控,避免第三方库的默认配置导致结果不符合预期,标准写法参考:
import csv # 存储结果的字典 csv_dict = {} with open("你的文件路径.csv", "r", encoding="utf-8") as f: # 如果CSV没有表头,需要传入field_names参数指定列名,例如field_names=["id", "name", "age"] reader = csv.DictReader(f) for row in reader: # 示例:以每行的id字段作为外层字典的key,整行数据作为value row_key = row.pop("id") csv_dict[row_key] = row
- 常见异常排查点:
- 编码不匹配:如果CSV是Excel导出的GBK编码,需要将
encoding参数改为gbk,避免乱码导致key/值错乱 - 重复key冲突:如果外层字典的key存在重复,后读取的行数据会直接覆盖之前的内容,建议加重复key校验逻辑
- 空值处理:默认
csv.DictReader会把空单元格返回为空字符串,如有需要可自行增加逻辑转为None或者指定默认值
- 编码不匹配:如果CSV是Excel导出的GBK编码,需要将
问题2:AWS DynamoDB
batch_writer() 正确实现方案 batch_writer()是boto3封装的批量操作工具,会自动处理25条/批的拆分、失败重试、错误去重等逻辑,不需要手动处理批大小限制,标准实现如下:
import boto3 # 初始化DynamoDB资源,注意提前配置好AWS凭证(环境变量/配置文件/EC2 IAM角色均可) dynamodb = boto3.resource("dynamodb") table = dynamodb.Table("你的表名") # 批量写入示例 with table.batch_writer() as batch: # 遍历你要写入的所有条目 for item in your_item_list: # 每个item必须包含表定义的全部主键字段,字段类型要和表定义匹配 batch.put_item(Item=item)
- 注意事项:
- 单条条目大小不能超过400KB,超出后
batch_writer()会抛出异常 - 如需批量删除,将
put_item替换为delete_item,传入Key={"主键字段名": "主键值"}即可 - 写入前确认表的WCU(写入容量单元)配置,吞吐量不足会触发自动重试,大量写入建议先开启动态扩容或者临时调整WCU配置
- 单条条目大小不能超过400KB,超出后
内容的提问来源于stack exchange,提问作者Canuckster
相关产品推荐
相关产品推荐

