首页 > 解决方案 > 用于读取 CSV 文件的 Python Lambda 函数

问题描述

def lambda_handler(event, context):
    bucket = s3_obj.Bucket(BucketName)
    for obj in bucket.objects.all():
        key = obj.key
        reader = csv.reader(open(key,'w'),delimiter=',')

我正在尝试使用 CSV 阅读器打开 S3 存储桶中的文件,但是当我执行此操作时,它会返回一条错误消息:

“[Errno 30] 只读文件系统:'ABC.csv'”

但该文件实际上存在于存储桶中。

有人可以让我知道我哪里出错了。

谢谢你。

标签: amazon-web-services

解决方案


您在未经许可的情况下打开文件进行写入。此外,您正试图从 s3 打开一个对象,这是不可能的。该文件不在本地文件系统上。您应该使用以下方式阅读它:

body = obj.get()['Body'].read()

然后将文件拆分成行并将它们传递给 csv 阅读器:

csv.reader(body.split('\n'),...)

请注意,如果您的文件是 Windows 格式,则在将其传递给阅读器之前,您可能需要进行更多处理。


推荐阅读