Python 是否可以在不使用boto3下载的情况下获取S3文件的内容?

Python 是否可以在不使用boto3下载的情况下获取S3文件的内容?,python,amazon-s3,boto3,Python,Amazon S3,Boto3,我正在处理一个从Redshift数据库转储文件的过程,我希望不必在本地下载文件来处理数据。我看到Java有一个StreamingObject类可以满足我的需要,但是我在bot3中没有看到类似的东西,如果你有一个mybucketS3 bucket,其中包含一个beer键,下面是如何下载和获取值而不将其存储在本地文件中: import boto3 s3 = boto3.resource('s3') print s3.Object('mybucket', 'beer').get()['Body'].r

我正在处理一个从
Redshift
数据库转储文件的过程,我希望不必在本地下载文件来处理数据。我看到
Java
有一个
StreamingObject
类可以满足我的需要,但是我在
bot3
中没有看到类似的东西,如果你有一个
mybucket
S3 bucket,其中包含一个
beer
键,下面是如何下载和获取值而不将其存储在本地文件中:

import boto3
s3 = boto3.resource('s3')
print s3.Object('mybucket', 'beer').get()['Body'].read()

这可能与您想做的事情有关,也可能与您想做的事情无关,但在我的情况下,使用tempfile非常有效:

import tempfile
import boto3
import PyPDF2

bucket_name = 'my_bucket'
s3 = boto3.resource('s3')
temp = tempfile.NamedTemporaryFile()
s3.Bucket(bucket_name).download_file(key_name, temp.name)
pdfFileObj = open(temp.name,'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
[... do what you will with your file ...]
temp.close()

很好的解决方案,但是。如果文件大于RAM大小,我们可以这样做吗。(或者我可以在s3中搜索100gb文件中的一个单词,我的系统有1gb内存和20GB硬盘)@yunus为此,你需要使用流式API。如果你想使用客户端,你还可以执行
s3=boto3.client('s3')打印(s3.get_对象(Bucket='mybucket',Key='beer')['Body'].read())
在我的例子中,我试图从s3下载一个csv文件,并使用csv阅读器读取它。您的解决方案非常有效,谢谢。