2024-04-30 06:02:02 发布
网友
我有一个字典列表,比如 temp_dict = [{'id':'1', 'name':'john'},{'id':'2', 'name':'jake'},{'id':'3', 'name':'jacob'}] 有没有一种方法可以让我直接将这个字典作为csv文件(以管道分隔)写入S3。我不想在此列表中在本地计算机上创建csv文件,然后将其复制到S3
temp_dict = [{'id':'1', 'name':'john'},{'id':'2', 'name':'jake'},{'id':'3', 'name':'jacob'}]
我认为这会有帮助:
import csv class Pipe: value = "" def write(self, text): self.value = self.value + text temp_dict = [{'id':'1', 'name':'john'},{'id':'2', 'name':'jake'},{'id':'3', 'name':'jacob'}] pipe = Pipe() writer = csv.DictWriter(pipe, temp_dict[0].keys()) for entry in temp_dict: writer.writerow(entry) print(pipe.value)
1,john 2,jake 3,jacob
基本上,我们编写一个类来模拟写模式下的文件对象,然后创建一个实例,并将其传递给DictWriter。最后,我们从pipe.value获取csv文本
DictWriter
pipe.value
这可以解决你的问题
将内存中的对象转换为二进制流,并使用boto3传递到s3
How to write a file or data to an S3 object using boto3
这是一个更加优雅和快速的解决方案,特别是对于大字典列表
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()
使用这个表示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)
注意,您的CSV文件现在已加载到内存中,可能会因大量数据而崩溃
我认为这会有帮助:
基本上,我们编写一个类来模拟写模式下的文件对象,然后创建一个实例,并将其传递给
DictWriter
。最后,我们从pipe.value
获取csv文本这可以解决你的问题
将内存中的对象转换为二进制流,并使用boto3传递到s3
How to write a file or data to an S3 object using boto3
这是一个更加优雅和快速的解决方案,特别是对于大字典列表
使用这个表示CSV文件内容的字符串对象,您可以通过boto3以您喜欢的任何方式直接将其插入S3
注意,您的CSV文件现在已加载到内存中,可能会因大量数据而崩溃
相关问题 更多 >
编程相关推荐