最新消息:因从typecho切换到wordpress, 由于转换导入问题,文章可能存在部分乱码或者排版问题,逐个排查修复中...

[AWS] 读取AWS S3 Object 内容的一些方法

AWS admin 1774浏览 0评论

开发中需要读取存放在AWS S3里面文件的内容。
常规做法:

            s3=boto3.client('s3')
            obj = s3.get_object(Bucket=bucket, Key=key)
            df = pd.read_csv(io.BytesIO(obj['Body'].read()))

注意此处是读取csv文件到pandas DataFrame的例子。s3这个client,因为我是使用lambda,且配置了读写S3的权限,故此不需要指定aws key id及aws key.如果你不是同样环境,请代码中指定。

如果本机配置过了AWS 配置。其实可以直接用pandas读取S3上面的内容。

import pandas as pd
df = pd.read_csv('s3://bucket-name/file.csv')

还可以使用其它第三方库比如smart_open https://pypi.org/project/smart_open/
它的优势是读取大文件吧。
来个example code

import pandas as pd
from smart_open import smart_open

aws_key = os.environ['AWS_ACCESS_KEY']
aws_secret = os.environ['AWS_SECRET_ACCESS_KEY']

bucket_name = 'my_bucket'
object_key = 'my_file.csv'

path = 's3://{}:{}@{}/{}'.format(aws_key, aws_secret, bucket_name, object_key)

df = pd.read_csv(smart_open(path))

另外还有s3fs 这个模块。文档见: https://s3fs.readthedocs.io/en/latest/

import s3fs
import pandas as pd
fs = s3fs.S3FileSystem(anon=False)

# CSV
with fs.open('mybucket/path/to/object/foo.csv') as f:
    df = pd.read_csv(f)

# Pickle
with fs.open('mybucket/path/to/object/foo.pkl') as f:
    df = pd.read_pickle(f)

转载请注明:Linc Hu » [AWS] 读取AWS S3 Object 内容的一些方法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址