Python 2.7 将S3文件作为对象检索,而不是下载到绝对系统路径
我刚开始学习和使用S3,阅读文档。实际上,我没有找到任何东西来将文件提取到对象中,而不是从S3下载它?如果这是可能的,或者我遗漏了什么Python 2.7 将S3文件作为对象检索,而不是下载到绝对系统路径,python-2.7,amazon-web-services,amazon-s3,aws-sdk,Python 2.7,Amazon Web Services,Amazon S3,Aws Sdk,我刚开始学习和使用S3,阅读文档。实际上,我没有找到任何东西来将文件提取到对象中,而不是从S3下载它?如果这是可能的,或者我遗漏了什么 实际上,我希望在下载文件后避免额外的IO。您可以使用StringIO并使用get\u contents\u as\u string从S3获取文件内容,如下所示: import pandas as pd import StringIO from boto.s3.connection import S3Connection AWS_KEY = 'XXXXXXDDD
实际上,我希望在下载文件后避免额外的IO。您可以使用
StringIO
并使用get\u contents\u as\u 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))
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()
您可能正在查找boto3 S3客户端的
get\u object()
方法:
这将获得一个带有成员Body
的响应对象字典,该字典是一个StreamingBody
对象,您可以将其用作普通文件并在其上调用.read()
方法。要将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))
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()
我更喜欢这种方法,相当于: 但另一种方法可以将对象读入
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()
GetObject(请参阅)有帮助吗?这里的
返回是什么?这是一个函数吗?你能发布整个工作示例吗?嗨@Joe,我在这里松散地使用了return
关键字来表示程序员想要的东西。我将这些语句包装在函数定义中以使其更清晰。谢谢。如何将拼花地板文件从S3读入变量string\u io
?我尝试了上面的代码并得到了错误:TypeError:string参数应为,得到了“bytes”
。嗨@Joe,Python 3有BytesIO
,您可以尝试使用而不是StringIO
。如果没有帮助,你可能需要问一个新问题。@Joe我这里有一个解决这个问题的方法,使用@Carl G建议的BytesIO