使用Python DictReader从S3读取csv文件

时间:2019-04-24 16:45:32

标签: python csv amazon-s3

我正在寻找编写Python代码,该代码从S3中读取一个csv文件,然后逐行浏览文件并使用每一行中的值。下面的示例来自realpython.org,我喜欢如何使用列标题名称(如row [“ department”])在行中选择值。

我尝试将csv.DictReader()与从S3存储桶中获取的csv文件一起使用,但是当我打开文件invalid argument时它返回TypeError: expected str, bytes or os.PathLike object, not StreamingBodywith open(obj['Body'], mode='r') as csv_file: < / p>

以下代码可用于从S3存储桶读取的csv文件吗?

import csv

with open('employee_birthday.txt', mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {", ".join(row)}')
            line_count += 1
        print(f'\t{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.')
        line_count += 1
    print(f'Processed {line_count} lines.')

1 个答案:

答案 0 :(得分:2)

obj['Body']StreamingBody对象,如错误消息所示。由于它是一个类似于文件的对象,因此您应将其传递到DictReader而不是将其作为文件的路径打开,但是由于它以字节为单位返回流并且DictReader需要文本流,您可以将其包装在io.TextIOWrapper

import io
csv_reader = csv.DictReader(io.TextIOWrapper(obj['Body']))