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

Lou*_*uis 3 python csv amazon-s3

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)
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何从StreamBody中检索csv文件名,如果可能的话.如果没有,我有更好的方法来阅读Python中的csv文件吗?谢谢!

编辑:想要添加我在AWS Lambda中这样做,并且在Lambda中使用pandas存在记录的问题,所以这就是为什么我想使用csv库而不是pandas.

小智 11

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

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

lines = response['Body'].read().splitlines(True)
reader = csv.reader(lines)
Run Code Online (Sandbox Code Playgroud)

  • 您可能还需要解码字节流,具体取决于您的编码-`response ['Body']。read()。decode('utf-8')。splitlines(True)` (2认同)

Chi*_*lal 5

要从 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')
Run Code Online (Sandbox Code Playgroud)