Python 使用boto3从s3获取多部分
我将大的zip文件存储在s3存储桶中,因此我想使用python boto3库分块下载它们 我首先尝试使用Python 使用boto3从s3获取多部分,python,amazon-s3,boto3,Python,Amazon S3,Boto3,我将大的zip文件存储在s3存储桶中,因此我想使用python boto3库分块下载它们 我首先尝试使用object.download_fileobj方法,但无法仅获取对象的一部分,因此我现在使用s3.get方法,该方法支持PartNumber=X参数 然而,在我开始获取零件之前,我无法找到零件的数量。 我的意思是,如果我在参数中没有给出部件号的情况下调用get,我会得到以下响应: s3.Object('mybucket', 'mytest.zip').get() {'ETag':'49345
object.download_fileobj
方法,但无法仅获取对象的一部分,因此我现在使用s3.get
方法,该方法支持PartNumber=X
参数
然而,在我开始获取零件之前,我无法找到零件的数量。
我的意思是,如果我在参数中没有给出部件号的情况下调用get,我会得到以下响应:
s3.Object('mybucket', 'mytest.zip').get()
{'ETag':'493458a23b7d2ed524e8f144aa9e91f4-27','LastModified':
datetime.datetime(2017,2,23,9,53,48,tzinfo=tzutc()),
'ResponseMetadata':{'RetryAttempts':0,'RequestId':
'E67ABBE9682AE0CA','HTTPHeaders':{'accept-ranges':'bytes',
“x-amz-id-2”:
“Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai++kvfnZSNtQ2cSQ7wmASMZxT17xg/WJJ29xBxyUQ=”,
“日期”:“2017年2月23日星期四10:55:02 GMT”,“上次修改”:“2017年2月23日星期四”
2017 09:53:48 GMT,“服务器”:“亚马逊3”,“内容类型”:
'application/zip','x-amz-request-id':'E67ABBE9682AE0CA',
“内容长度”:“222492172”,“etag”:
“493458a23b7d2ed524e8f144aa9e91f4-27”},“主机ID”:
“Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai++kvfnZSNtQ2cSQ7wmASMZxT17xg/WJJ29xBxyUQ=”,
'HTTPStatusCode':200},'ContentLength':222492172,'ContentType':
'application/zip','Body':,'AcceptRanges':'bytes','Metadata':{}
我们可以看到这里没有PartCount
如果我也这样做,但使用零件号=1
:
s3.Object('mybucket', 'mytest.zip').get(PartNumber=1)
{'ETag':'493458a23b7d2ed524e8f144aa9e91f4-27','LastModified':
datetime.datetime(2017,2,23,9,53,48,tzinfo=tzutc()),
'PartsCount':27,'ContentRange':'bytes 0-8388607/222492172',
'ResponseMetadata':{'RetryAttempts':0,'RequestId':
'2EE3109196C76834','HTTPHeaders':{'accept-ranges':'bytes',
“x-amz-id-2”:
“Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET+EB2fAZ4BtTDo5dqw/fJZ8PNu3vM5/0mTUkj9/AqhY=”,
“x-amz-mp-parts-count”:“27”,“日期”:“2017年2月23日星期四10:58:20 GMT”,
‘etag’:‘493458a23b7d2ed524e8f144aa9e91f4-27’,‘内容范围’:
'字节0-8388607/222492172','内容类型':'应用程序/zip',
“服务器”:“AmazonS3”,“x-amz-request-id”:“2EE3109196C76834”,
“内容长度”:“8388608”,“上次修改”:“2017年2月23日星期四”
09:53:48格林尼治标准时间},“HostId”:
“Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET+EB2fAZ4BtTDo5dqw/fJZ8PNu3vM5/0mTUkj9/AqhY=”,
'HTTPStatusCode':206},'ContentLength':8388608,'ContentType':
'application/zip','Body':,'AcceptRanges':'bytes','Metadata':{}
我知道你可以看到块的数量
‘partscont’:27
在我开始下载文件之前,有没有办法获取块的数量?您可以使用获取该数量。或者,由于您正在使用对象资源,.实际上
object.parts\u count
返回None
,head\u对象只包含以下键['ETag'、'LastModified'、'AcceptRanges'、'ResponseMetadata'、'ContentLength'、'ContentType']
如果将PartNumber=1
作为参数传递给head\u object
,它将返回partscont
,其中包含零件数量。