将字典列表作为 csv 直接写入 S3

Aks*_*ale 4 python csv amazon-s3 amazon-web-services

我有一个字典列表,例如 temp_dict = [{'id':'1', 'name':'john'},{'id':'2', 'name':'jake'},{'id':'3', 'name':'jacob'}] 是否有一种方法可以直接将此字典作为 csv 文件(管道分隔)写入 S3。我不想从此列表中在本地创建 csv 文件,然后将其复制到 S3。

小智 8

这是一个更优雅且非常快的解决方案,特别是对于大型字典列表。

import io
import csv

data = [{"param1": 1, "param2": 2}, {"param1": 1, "param2": 3}]

stream = io.StringIO()
headers = list(data[0].keys())
writer = csv.DictWriter(stream, fieldnames=headers)
writer.writeheader()
writer.writerows(data)

csv_string_object = stream.getvalue()
Run Code Online (Sandbox Code Playgroud)

使用这个表示 CSV 文件内容的字符串对象,您可以通过 boto3 以您喜欢的方式将其直接插入到 S3 中。

session = boto3.session.Session(profile_name=<your_profile_name>)
resource = session.resource("s3")
resource.Object(<s3_bucket>, <s3_key>).put(Body=csv_string_object)
Run Code Online (Sandbox Code Playgroud)

请注意,您的 CSV 文件现已加载到内存中,并且可能会因大量数据而崩溃。