Amazon web services 用于读取CSV文件的Python Lambda函数

Amazon web services 用于读取CSV文件的Python Lambda函数,amazon-web-services,Amazon Web Services,我试图使用CSV阅读器打开S3存储桶中的文件,但当我执行此操作时,它会返回一个错误,即: “[Errno 30]只读文件系统:'ABC.csv'” 但是文件实际上存在于bucket中 谁能告诉我哪里出错了吗 谢谢。您正在未经许可打开文件进行写入。此外,您正试图从s3打开一个对象,这是不可能的。该文件不在本地文件系统上。您应该使用以下方式阅读: body=obj.get()['body'].read() 然后将文件拆分为多行,并将其传递给csv阅读器: csv.reader(body.split(

我试图使用CSV阅读器打开S3存储桶中的文件,但当我执行此操作时,它会返回一个错误,即:

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

但是文件实际上存在于bucket中

谁能告诉我哪里出错了吗


谢谢。

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

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

然后将文件拆分为多行,并将其传递给csv阅读器:

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


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

尽管存在读写权限问题,为什么要将S3对象的密钥传递给打开的本地文件?在S3中不能像这样读取对象。您需要将对象从S3下载到/tmp,然后打开它进行CSV读取,或者从S3流式传输,非常感谢您的响应。我尝试了“打开(键,r)”,但它仍然返回相同的错误。想法?啊,是的,很抱歉,您试图读取s3对象。你不能用open。我已经更新了我的答案。
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=',')