amazon-web-services - 用于读取 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'”
但该文件实际上存在于存储桶中。
有人可以让我知道我哪里出错了。
谢谢你。
解决方案
您在未经许可的情况下打开文件进行写入。此外,您正试图从 s3 打开一个对象,这是不可能的。该文件不在本地文件系统上。您应该使用以下方式阅读它:
body = obj.get()['Body'].read()
然后将文件拆分成行并将它们传递给 csv 阅读器:
csv.reader(body.split('\n'),...)
请注意,如果您的文件是 Windows 格式,则在将其传递给阅读器之前,您可能需要进行更多处理。
推荐阅读
- triggers - ST PLC 编程:检测上升沿并记住其值
- java - 单击listview项目android studio后显示fab按钮
- flutter - Flutter:当我抛出异常时,构建器在未来的构建器中调用了两次
- r - 用 r 中的 DataFrame 中的 if-else 替换 NA
- python - 是否可以仅使用 STFT 频谱图的图片来进行声音重建?
- javascript - 如何在按钮单击操作开始之前为 onblur 验证设置超时/间隔以完成?
- javascript - Zabbix 使用 javascript for 循环预处理项目
- python - 我找不到使用 python selenium 输入文本的元素
- amazon-s3 - 每当我将图像上传到 S3 AWS 时,如何设置“始终公开图像”?
- google-cloud-functions - 从 Cloud Function 的文件到达事件触发 Composer DAG 上的任务