首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用S3读取存储在csv.DictReader中的csv?

如何使用S3读取存储在csv.DictReader中的csv?
EN

Stack Overflow用户
提问于 2017-02-17 23:05:03
回答 1查看 26.8K关注 0票数 15

我有获取AWS S3对象的代码。我如何用Python的StreamingBody阅读这个csv.DictReader?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import boto3, csv

session = boto3.session.Session(aws_access_key_id=<>, aws_secret_access_key=<>, region_name=<>)
s3_resource = session.resource('s3')
s3_object = s3_resource.Object(<bucket>, <key>)
streaming_body = s3_object.get()['Body']

#csv.DictReader(???)
EN

回答 1

Stack Overflow用户

发布于 2017-02-19 08:26:43

代码应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import boto3
import csv

# get a handle on s3
s3 = boto3.resource(u's3')

# get a handle on the bucket that holds your file
bucket = s3.Bucket(u'bucket-name')

# get a handle on the object you want (i.e. your file)
obj = bucket.Object(key=u'test.csv')

# get the object
response = obj.get()

# read the contents of the file and split it into a list of lines

# for python 2:
lines = response[u'Body'].read().split()

# for python 3 you need to decode the incoming bytes:
lines = response['Body'].read().decode('utf-8').split()

# now iterate over those lines
for row in csv.DictReader(lines):

    # here you get a sequence of dicts
    # do whatever you want with each line here
    print(row)

您可以在实际代码中压缩这一点,但我试着一步一步地使用boto3来显示对象层次结构。

根据您的评论编辑有关避免将整个文件读入内存的内容:我还没有遇到这样的要求,所以无法权威性地发言,但是我会尝试包装流,这样我就可以得到一个类似文本文件的迭代器。例如,您可以使用编解码器库将上面的csv解析部分替换为如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for row in csv.DictReader(codecs.getreader('utf-8')(response[u'Body'])):
    print(row)
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42312196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文