如何解决忽略s3文件名中的元字符
我正在尝试将数据从s3复制到Aurora,并使用下面的命令执行此操作
aws_commons.create_s3_uri('mybucket','HourlyData/[20-10-2020]','us-east-1'),aws_commons.create_aws_credentials('******','***************',''))
除了名称中带有方括号([])的文件之外,所有文件都可以正常工作。 例如:HourlyData / [20-10-2020]文件无法加载,因为HourlyData / 20-10-2020成功加载了
当我从外部来源获取文件时,是否有办法解决此问题? 加载名称为[]的文件时,出现以下错误。
(“错误”,“错误”,“ XX000”,“ HTTP403。权限被拒绝。请检查存储桶或提供的凭据,因为它们可能不再有效。”,“ SQL函数“ table_import_from_s3”语句1”,“ aws_s3 .c','405','perform_import')
解决方法
使用这些字符is not recommended
具体来说,这些是“安全”字符:
Forward slash (/)
Exclamation point (!)
Hyphen (-)
Underscore (_)
Period (.)
Asterisk (*)
Single quote (')
Open parenthesis (()
Close parenthesis ())
在我链接的文档中,方括号特别列为“要避免的字符”。
那么,适当的策略可能是在传递文件名之前替换方括号。如果以后需要使s3对象与文件保持关联,则需要创建第二个函数来反转第一个替换对象。
例如:
def make_s3_safe_name(original_filename):
return original_filename.replace('[','(')).replace(']',')')
def recover_original_name(s3_safe_name):
return s3_safe_name.replace('(',']')).replace(')',']')
original_filename = 'HourlyData/[20-10-2020]'
s3_safe_filename = make_s3_safe_name(original_filename)
aws_commons.create_s3_uri('mybucket',s3_safe_filename,'us-east-1'),
如果文件名带有其他不安全的字符,最好使用更强大的编码系统,例如base64。在python中,有一个模块可以提供相关功能:base64.encode(string)
和base64.decode(string)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。