我有一个字典列表,如下所示:
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'}]
有没有一种方法可以直接将该字典写为CSV文件(以管道分隔符分隔),并保存到S3上。我不想从此列表在本地创建CSV文件,然后再将其复制到S3上。
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()
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文件现在已经被加载到内存中,大量的数据可能会导致崩溃。
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文本。