我将大的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':'kymvd3rkqzfkjodnvbh1fog2zfzwjqaei kvfnzntq2csq7wmasmzxt17xg/WJJ29xBxyUQ=','date':'2017年2月23日星期四10:55:02 GMT','last modified':'2017年2月23日星期四09:53:48 GMT','server':'AmazonS3','content type':'application/zip','x-amz-request-id':'e67abbe96820ca','content','2492g''“493458a23b7d2ed524e8f144aa9e91f4-27”},“主机ID”:“Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai kvfnZSNtQ2cSQ7wmASMZxT17xg/WJJ29xBxyUQ=”,“HTTPStatusCode”:200},“ContentLength”:222492172,'ContentType':“application/zip”,“Body:”,“AcceptRanges:“bytes”,“Metadata:{}”
我们可以看到这里没有PartCount
如果我做同样的事情,但与Part Number=1
:
s3.Object('mybucket', 'mytest.zip').get(PartNumber=1)
{'ETag':'"493458a23b7d2ed524e8f144aa9e91f4-27",'LastModiated':datetime.datetime(2017, 2, 23, 9, 53, 48,tzinfo=tzutc()),'Part sCount': 27,'ContentRange':'bytes0-8388607/222492172','响应元数据':{'RetryAttempt': 0,'请求ID':'2EE3109196C76834','HTTPHeaders':{'接受范围':'bytes','x-amz-id-2':'Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET EB2fAZ4BtTDo5dqw/fJZ8PNu3vM5/0mTUkj9/AqhY=','x-amz-mp-parts-count':'27','date':'Thu,23 Feb2017 10:58:20GMT','etag':'"493458a23b7d2ed524e8f144a9e91f4-27"','内容范围':'字节0-8388607/222492172','内容类型':'应用程序/zip','服务器':'亚马逊3','x-amz-请求-id':'2EE3109196C76834','内容长度':'8388608','最后修改':'周四,23 Feb2017 09:53:48GMT'},'HostId':'Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET EB2fAZ4BtTDo5dqw/fJZ8PNu3vM5/0mTUkj9/AqhY=','HTTPStatusCode': 206},'ContentLlong': 8388608,'ContentType':'Application/zip','Body':,'AcceptRanges':'bytes','Metadata':{}}
我知道你可以看到块的数量
‘partscont’:27
在我开始下载文件之前,有没有办法获得块的数量?
您可以使用head\u object
获取该数字。或者,由于您正在使用对象资源,object.parts\u count
。
我通过执行以下操作读取S3存储桶中的文件名 现在,我需要获取文件的实际内容,类似于打开(filename).readlines()。最好的方法是什么?
问题内容: 我这样做是读取了S3存储桶中的文件名 现在,我需要获取文件的实际内容,类似于。什么是最好的方法? 问题答案: boto3提供了一种资源模型,该资源模型使诸如迭代对象之类的任务变得更加容易。不幸的是,StreamingBody不提供或。
我上传到S3使用以下代码: 我无法了解boto内部如何处理分段上传的任何信息。我对同样的事情有几个问题,让我们假设我有2.5 MB的文件: 然后文件将分3部分上传,如1,1和.5 MB? 所有3个部分将并行上传还是按顺序上传? 在java的aws库中,我们有转移管理器,在博托中有什么类似的东西吗? 此代码是否足以用于多段上传?因为我遇到了一些复杂的代码示例 任何帮助都将不胜感激。
使用boto3,您可以从S3中的某个位置读取文件内容,给定一个bucket名称和密钥,如所示(这假设一个初步的) 这将返回一个字符串类型。我需要获取的特定文件恰好是一组类似字典的对象,每行一个。所以它不是JSON格式。我不想将其作为字符串读取,而是将其作为文件对象进行流式处理并逐行读取;除了先在本地下载该文件外,找不到其他方法来执行此操作 我想问的是,是否有可能在不必先在本地下载的情况下对文件进行
boto3文档建议从命令行配置密钥。如果有的话,我可以把AWS键放入python源代码中吗?下面是供参考的代码。
我在s3桶中保存了一些json文件,我想使用boto3读取这些json文件的内容。有人能建议怎么做吗?