2016-05-07 7 views
2

S3の学習と使用を開始したばかりのので、ドキュメントを読んでください。実際に私はS3からダウンロードするのではなく、オブジェクトにファイルを取り込むためのものは何も見つかりませんでしたか?これが可能なのか、何かが欠けているのでしょうか?絶対システムパスにダウンロードするのではなく、S3ファイルをオブジェクトとして取得する

実際には、ファイルをダウンロードした後にIOを追加しないようにしたいと考えています。

+0

んのGetObject(https://docs.aws.amazon.com/AmazonS3/latest/dev/RetrievingObjectUsingNetSDK.htmlを参照)を助けますか? – sgmoore

答えて

2

あなたはこのように、StringIOを使用してget_contents_as_stringを使用してS3からファイルの内容を取得することができます:

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)) 
6
あなたはboto3 S3クライアントの get_object()方法を探しているかもしれない

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.get_object

これにより、StreamingBodyというオブジェクトのメンバーオブジェクトBodyが返されます。これは通常のファイルとして使用でき、.read()方法です。同等

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() 
1

私はこのアプローチを好む、a previous answerに:

import boto3 
s3 = boto3.resource('s3') 
response = s3.Object(bucket_name, key).get() 
return response['Body'].read() 

をしかし、別のアプローチがStringIOにオブジェクトを読むことができるメモリにS3オブジェクトの全体の内容を取得するには、このような何かをするだろう:

import StringIO 
import boto3 
s3 = boto3.resource('s3') 
string_io = StringIO.StringIO() 
s3.Object(bucket_name, key).download_fileobj(string_io) 
return string_io.getvalue() 
関連する問題