繁体   English   中英

Python - 如何读取从 S3 存储桶检索的 CSV 文件?

[英]Python - How to read CSV file retrieved from S3 bucket?

S3 存储桶中有一个 CSV 文件,我想将其解析并转换为 Python 中的字典。 使用 Boto3,我调用了s3.get_object(<bucket_name>, <key>)函数并返回一个字典,其中包含一个"Body" : StreamingBody()键值对,显然包含我想要的数据。

在我的 python 文件中,我添加了import csv和我在网上看到的有关如何读取 csv 文件的示例,您传递了文件名,例如:

with open(<csv_file_name>, mode='r') as file:
reader = csv.reader(file)

但是,如果可能的话,我不确定如何从 StreamBody 检索 csv 文件名。 如果没有,有没有更好的方法让我在 Python 中读取 csv 文件? 谢谢!

编辑:想补充一点,我正在 AWS Lambda 中执行此操作,并且在 Lambda 中使用 Pandas 存在记录问题,所以这就是我想使用 csv 库而不是 Pandas 的原因。

csv.reader 不需要文件。 它可以使用任何遍历行的内容,包括文件和列表。

所以你不需要文件名。 只需将 response['Body'] 中的行直接传递给阅读器。 一种方法是

lines = response['Body'].read().splitlines(True)
reader = csv.reader(lines)

要从 s3 存储桶检索和读取 CSV 文件,您可以使用以下代码:

import csv
import boto3
from django.conf import settings

bucket_name = "your-bucket-name"
file_name = "your-file-name-exists-in-that-bucket.csv"

s3 = boto3.resource('s3', aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
                    aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)

bucket = s3.Bucket(bucket_name)

obj = bucket.Object(key=file_name)

response = obj.get()
lines = response['Body'].read().decode('utf-8').splitlines(True)

reader = csv.DictReader(lines)
for row in reader:
    # csv_header_key is the header keys which you have defined in your csv header
    print(row['csv_header_key1'], row['csv_header_key2')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM