python123 io download_python-2.7 – boto3 download_file中的IO错误

背景

我使用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上不存在.使用该文章确保您使用正确的方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值