Python 3.x python中的boto3文件上载

Python 3.x python中的boto3文件上载,python-3.x,amazon-web-services,amazon-s3,boto3,Python 3.x,Amazon Web Services,Amazon S3,Boto3,我正试图通过boto 3上传aws s3 bucket中的文件 但以下内容不是文件,而是上传的 如何正确上传文件?Object方法中的Body是: 正文(字节或类似对象的可查找文件)——对象数据 因此,应尝试以下操作(固定缩进并删除str): def write_csv(数据): 打开('excel.csv','a')作为文件: writer=csv.writer(文件) writer.writerow([data['account_id'], 数据[“国家], 数据['结束日期'], 数据[“

我正试图通过boto 3上传aws s3 bucket中的文件

但以下内容不是文件,而是上传的

如何正确上传文件?

Object
方法中的Body是:

正文(字节或类似对象的可查找文件)——对象数据

因此,应尝试以下操作(固定缩进并删除
str
):

def write_csv(数据):
打开('excel.csv','a')作为文件:
writer=csv.writer(文件)
writer.writerow([data['account_id'],
数据[“国家],
数据['结束日期'],
数据[“开始日期”])
上传到3(文件)
def上载到3(文件):
键='xxxx'
seckey='xxxx'
s3=boto3.resource('s3',
aws\u访问\u密钥\u id=密钥,
aws_secret_access_key=seckey)
upload\u file\u bucket='apiuploadtest'
s3.Object(上传文件存储桶,).put(Body=file)

顺便说一句,在源代码中硬编码任何AWS凭据都不是一个好的做法。

谢谢,它起作用了,但是如果我想要与文件名相同的名称并上传文件呢。是的,我只是测试了一个api调用的代码,因此使用了aws密钥directly@pyguru没问题。您可以将文件名作为第二个变量传递到
uploadtos3
def write_csv(data):
    with open('excel.csv', 'a') as file:
        writer = csv.writer(file)
        writer.writerow([data['account_id'],
                         data['country'],
                         data['end_date'],
                         data['start_date']])

    uploadtos3(str(file))


def uploadtos3(file):
    key = 'xxxx'
    seckey = 'xxxx'
    s3 = boto3.resource(  's3',
                           aws_access_key_id = key,
                           aws_secret_access_key = seckey)
    upload_file_bucket = 'apiuploadtest'
    s3.Object(upload_file_bucket,str(file)).put(Body = str(file))
def write_csv(data):
    with open('excel.csv', 'a') as file:
        writer = csv.writer(file)
        writer.writerow([data['account_id'],
                         data['country'],
                         data['end_date'],
                         data['start_date']])

        uploadtos3(file)


def uploadtos3(file):
    key = 'xxxx'
    seckey = 'xxxx'
    s3 = boto3.resource('s3',
                         aws_access_key_id = key,
                         aws_secret_access_key = seckey)
    upload_file_bucket = 'apiuploadtest'
    s3.Object(upload_file_bucket, <key-name-on-s3>).put(Body = file)