Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用boto3从s3获取多部分_Python_Amazon S3_Boto3 - Fatal编程技术网

Python 使用boto3从s3获取多部分

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

我将大的zip文件存储在s3存储桶中,因此我想使用python boto3库分块下载它们

我首先尝试使用
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
,其中包含零件数量。