python - 如何在 AWS lambda python 中读取对象并转换为 json
问题描述
我的csv在下面。我需要使用 AWS lambda 使用 python 转换为 json
value,Name,flag
ABC,ab@gmail.com|cd@gmail.com,Y
ABC,de@gmail.com,Y
CDE,ab@gmail.com,N
CDE,cd@gmail.com,N
代码如下
import boto3
import csv
s3_read = boto3.client('s3')
obj = s3_read.get_object(Bucket=bucket, Key=key)
CSVcontent = obj['Body'].read().decode('utf-8').split('\n')
CSVfile = csv.reader(CSVcontent)
print('CSVfile', list(CSVfile))
我目前的输出是
[['value', 'Name', 'flag'], ['ABC', 'ab@gmail.com|cd@gmail.com', 'Y'], ['ABC', 'de@gmail.com', 'Y'], ['CDE', 'ab@gmail.com', 'N'], ['CDE', 'cd@gmail.com', 'N']]
- 我需要合并所有相同的键和相同的标志
- 我需要将所有更改
|
为不同的字符串
预期结果如下
[{'value': 'ABC', 'name': ['ab@gmail.com','cd@gmail.com','de@gmail.com'], 'flag': 'Y'},
{'value': 'CDE', 'name': ['ab@gmail.com','cd@gmail.com'], 'flag': 'N'}]
解决方案
从您当前的数据 ( list(CSVfile)
) 开始并创建一个 dicts 列表
current = [['value', 'Name', 'flag'], ['ABC', 'ab@gmail.com|cd@gmail.com', 'Y'], ['ABC', 'de@gmail.com', 'Y'],
['CDE', 'ab@gmail.com', 'N'], ['CDE', 'cd@gmail.com', 'N']]
def handle(k, v):
if k == 'Name':
return v.split('|')
else:
return v
data = []
for entry in current[1:]:
data.append({k: handle(k,entry[idx]) for idx, k in enumerate(current[0])})
print(data)
输出
[{'value': 'ABC', 'Name': ['ab@gmail.com', 'cd@gmail.com'], 'flag': 'Y'}, {'value': 'ABC', 'Name': ['de@gmail.com'], 'flag': 'Y'}, {'value': 'CDE', 'Name': ['ab@gmail.com'], 'flag': 'N'}, {'value': 'CDE', 'Name': ['cd@gmail.com'], 'flag': 'N'}]
推荐阅读
- c++ - C ++中具有通用数据类型的可迭代容器
- javascript - Need to change the color of individual on/off buttons on my page after being clicked from green to red
- c# - 为什么机器人在航点周围不停地绕圈?我应该如何修复这种行为?
- reactjs - 如何在反应组件中引用存储在 mongodb 上的文件路径?
- html - 我对消失的“动态”表单字段有疑问!(html + jquery)
- c# - HTML 'a' 标签缺少 'href' 属性
- flutter - 是否有一个订阅流,它不会引发异常。相反,它会自动取消旧订阅?
- node.js - 在Angular 9中进行post调用以将文件传递给express-fileupload的正确方法是什么?
- c# - 添加整数?
- python - 我怎么知道文件循环器是否完成了检查以相同名称开头的文件