Bru*_*yne 10 amazon-s3 amazon-web-services python-2.7 aws-sdk
我刚开始学习和使用S3,阅读文档.实际上我没有找到任何东西将文件提取到对象而不是从S3下载?如果这可能,或者我错过了什么?
实际上我想在下载文件后避免额外的IO.
gre*_*epe 29
您可能正在寻找get_object()boto3 S3客户端的方法:
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.get_object
这将为您提供一个响应对象字典,其成员Body是一个 StreamingBody对象,您可以将其用作普通文件和调用.read()方法.要将S3对象的全部内容存入内存,您可以执行以下操作:
s3_client = boto3.client('s3')
s3_response_object = s3_client.get_object(Bucket=BUCKET_NAME_STRING, Key=FILE_NAME_STRING)
object_content = s3_response_object['Body'].read()
Run Code Online (Sandbox Code Playgroud)
小智 12
您可以使用StringIO并从S3获取文件内容get_contents_as_string,如下所示:
import pandas as pd
import StringIO
from boto.s3.connection import S3Connection
AWS_KEY = 'XXXXXXDDDDDD'
AWS_SECRET = 'pweqory83743rywiuedq'
aws_connection = S3Connection(AWS_KEY, AWS_SECRET)
bucket = aws_connection.get_bucket('YOUR_BUCKET')
fileName = "test.csv"
content = bucket.get_key(fileName).get_contents_as_string()
reader = pd.read_csv(StringIO.StringIO(content))
Run Code Online (Sandbox Code Playgroud)
Car*_*l G 10
我更喜欢这种方法,相当于之前的答案:
import boto3
s3 = boto3.resource('s3')
def read_s3_contents(bucket_name, key):
response = s3.Object(bucket_name, key).get()
return response['Body'].read()
Run Code Online (Sandbox Code Playgroud)
但另一种方法可以将对象读入StringIO:
import StringIO
import boto3
s3 = boto3.resource('s3')
def read_s3_contents_with_download(bucket_name, key):
string_io = StringIO.StringIO()
s3.Object(bucket_name, key).download_fileobj(string_io)
return string_io.getvalue()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19054 次 |
| 最近记录: |