开发中需要读取存放在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 内容的一些方法