【问题标题】:Python - How to read CSV file retrieved from S3 bucket?Python - 如何读取从 S3 存储桶检索到的 CSV 文件?
【发布时间】:2020-09-02 18:11:05
【问题描述】:

在 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 的原因。

【问题讨论】:

  • 您可以使用 response['Body'].read() 之类的方式读取 CSV 数据,然后将结果传递给 csv.reader()(尽管您可能必须先对其进行解码并将其拆分为行)。

标签: python csv amazon-s3


【解决方案1】:

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

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

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

【讨论】:

  • 您可能还需要解码字节流,具体取决于您的编码 - response['Body'].read().decode('utf-8').splitlines(True)
  • 这似乎在 python 2 和 3 之间有所不同。2.7 文档说“csv 模块不直接支持读写 Unicode”并建议将其提供为 utf-8。
  • 我看到 Lambda 正在使用 CSV。问题是当我尝试进行任何 ETL 转换时,我发现它很困难。如何在 Lambda 中执行 ETL 作业,因为我无法将 CSV 作为文件打开,而只能读取它。有没有办法以 CSV 格式打开它并开始处理它。
【解决方案2】:

要从 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')

【讨论】:

    猜你喜欢
    • 2019-11-12
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多