[英]How to write dictionary data in memory value directly to s3 bucket as in csv file without writing in file then uploading it
import boto3
import pandas as pd
BUCKET_NAME = ''
ACCESS_KEY_ID = ''
ACCESS_SECRET_KEY = ''
Fraudfilekey = 'fraud_CT_ID_IM_NO/ CT_PROFILE_One_to_Many_Mapping /yyyy=2021/mm=02/dd=05/2021_02_05_CT_TEST.csv'
d = {"A" : ["John","Deep","Julia","Kate","Sandy"],
"MonthSales" : [25,30,35,40,45]}
df = pd.DataFrame(d)
s3 = boto3.client('s3', region_name='ap-south-1', aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY)
def write_to_s3_oneim_to_onect(df):
s3.put_object(Body=df, Bucket=BUCKET_NAME, Key=Fraudfilekey)
write_to_s3_oneim_to_onect(df)
如何將字典值直接寫入 s3 存儲桶,我得到 Body 下面的錯誤 raise ParamValidationError(report=report.generate_report()) botocore.exceptions.ParamValidationError: Parameter validation failed: Invalid type for parameter Body, value: A MonthSales
注意:我希望在 csv 文件中將 Headers col 作為 IM No、CT ID
有幾種方法。 一種是使用BytesIO
作為文件的 memory 緩沖區:
import io
def write_to_s3_oneim_to_onect(df):
bytes_io = io.BytesIO()
df.to_csv(bytes_io)
s3.put_object(Body=bytes_io.getvalue(),
Bucket=BUCKET_NAME,
Key=Fraudfilekey)
其他方法是使用pandas支持的 s3fs。 這將需要您安裝 s3fs 並設置 AWS credetnails以供其使用。 但是一旦設置,寫入 S3 將是:
def write_to_s3_oneim_to_onect(df):
df.to_csv(f"s3://{BUCKET_NAME}/{Fraudfilekey}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.