【发布时间】:2021-09-24 19:04:12
【问题描述】:
我正在尝试将 csv 文件上传到 s3。当我尝试围绕方法创建一个类时,我得到一个Type Error: upload_file_to_s3bucket() missing 1 required positional argument: 'file_path'。它可以在没有类的情况下成功运行。
class S3Upload():
def __init__(self, filename=TEST_FILE, filetype='.csv'):
self.filename = filename
self.type = filetype
def make_bucket(self, name, acl):
session = aws_session()
s3_resource = session.resource('s3')
return s3_resource.create_bucket(Bucket=name, ACL=acl)
def upload_file_to_s3bucket(self, bucket_name, file_path):
session = aws_session()
s3_resource = session.resource('s3')
file_dir, file_name = os.path.split(file_path)
bucket = s3_resource.Bucket(bucket_name)
bucket.upload_file(
Filename=file_path,
Key=file_name,
ExtraArgs={'ACL': 'public-read'}
)
s3_url = f"https://{bucket_name}.s3.amazonaws.com/{file_name}"
return s3_url
s3_url = upload_file_to_s3bucket('mitch-demo', TEST_FILE)
print(s3_url) # https://mitch-demo.s3.amazonaws.com/simple.csv
if __name__ == '__main__':
S3 = S3Upload(TEST_FILE)
S3.make_bucket()
S3.upload_file_to_s3bucket()
【问题讨论】:
-
你为什么在类定义中调用
upload_file_to_s3bucketin?您将其作为普通函数调用,但它仍需要 3 个参数:S3Upload的实例、存储桶名称和文件名。 -
你到底为什么在课堂上做
s3_url = upload_file_to_s3bucket('mitch-demo', TEST_FILE)?你期望做什么?