如何在S3 Boto客户端中使用变量作为存储桶路径的组成部分?
问题:Boto3 S3上传时使用变量生成目标路径
已定义变量:
var1 = "A" var2 = "B" var3 = "C"
当前上传代码:
client.upload_file('myfile.jpeg', 'bucket', 'directory/{var1}/{var2}/{var3}')
问题:Lambda执行后,生成的路径为directory/{var1}/{var2}/{var3},变量名被当作字面量使用,而非替换为实际值A/B/C,期望路径为directory/A/B/C。
解决方案
通过Python的字符串格式化语法,即可让变量值替换路径中的占位符,以下是几种常用方法:
f-string(Python 3.6及以上版本推荐):在字符串前加
f前缀,直接在{}中引用变量名即可解析值client.upload_file('myfile.jpeg', 'bucket', f'directory/{var1}/{var2}/{var3}')str.format()方法:适用于Python 3.5及以下版本,通过
.format()传入变量值client.upload_file('myfile.jpeg', 'bucket', 'directory/{}/{}/{}/'.format(var1, var2, var3))字符串拼接:直接用
+连接字符串和变量,逻辑简单但可读性稍差client.upload_file('myfile.jpeg', 'bucket', 'directory/' + var1 + '/' + var2 + '/' + var3)
原代码失效的原因是:普通字符串中的{var1}只是普通字符,Python不会自动解析为变量,必须使用格式化语法触发变量值的替换。
内容的提问来源于stack exchange,提问作者i'i'i'i'i'i'i'i'i'i
相关产品推荐
相关产品推荐

