gpt4 book ai didi

python-2.7 - Boto3 下载文件中的 IOError

转载 作者:行者123 更新时间:2023-12-04 15:08:34 31 4
gpt4 key购买 nike

背景
我正在使用以下 Boto3 代码从 S3 下载文件。

for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
print (key)
if key.find('/') < 0 :
if len(key) > 4 and key[-5:].lower() == '.json': //File is uploaded outside any folder

download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
else:
download_path = '/tmp/{}/{}'.format(uuid.uuid4(), key)//File is uploaded inside a folder
如果在 S3 存储桶中上传了新文件,则会触发此代码并通过此代码下载新上传的文件。
当上传到任何文件夹之外时,此代码工作正常。
但是,当我在目录中上传文件时,会发生 IO 错误。
这是我遇到的 IO 错误的转储。

[Errno 2] No such file or directory:/tmp/316bbe85-fa21-463b-b965-9c12b0327f5d/test1/customer1.json.586ea9b8:IOError

test1是我的 S3 存储桶中的目录,其中 customer1.json已上传。
查询
关于如何解决此错误的任何想法?

最佳答案

引发错误,因为您试图下载文件并将其保存到不存在的目录中。使用 os.mkdir在下载文件之前创建一个目录。

# ...
else:
item_uuid = str(uuid.uuid4())
os.mkdir('/tmp/{}'.format(item_uuid))
download_path = '/tmp/{}/{}'.format(item_uuid, key) # File is uploaded inside a folder

备注 : 最好用 os.path.join()在使用系统路径操作时。所以上面的代码可以改写为:
# ...
else:
item_uuid = str(uuid.uuid4())
os.mkdir(os.path.join(['tmp', item_uuid]))
download_path = os.path.join(['tmp', item_uuid, key]))

也可能会引发错误,因为您在 s3 存储桶文件的下载路径中包含“/tmp/”,不包含 tmp s3 上可能不存在该文件夹。通过使用这些文章确保您走在正确的道路上:
  • Amazon S3 upload and download using Python/Django
  • Python s3 examples
  • 关于python-2.7 - Boto3 下载文件中的 IOError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39569718/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com