最近遇到个问题,阿里云oss里面,部分文件名里面带有+,而+号在浏览器url里面会自动被替换空格,这样下载地址就成了404了,由于文件有10万加,手动修改很难,正好最近在学python,找到了阿里云sdk的文档,有用python操作的方法,立马干起来,没想到10多分钟就搞好了,这是除开爬爬以外,我用python第二次实战,非常有成就感,比用那个命令行工具爽多了。
python搜索重命名阿里云oss中的文件方法
具体文档在https://help.aliyun.com/document_detail/32025.html很长,我只看了安装、重命名和列举、查询这几篇,查询没看懂……我以为查询是搜索文件了,似乎不是。用列举文件和重命名就解决了,轻松的很。
需要先安装sdk,python就是直接pip install oss2就行了。文档说只支持到python3.8,我的3.9用起来也没毛病
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import oss2 # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') # 填写Bucket名称,例如examplebucket。 bucket_name = 'examplebucket' # yourEndpoint填写Bucket所在Region对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', bucket_name) # 先列举Bucket下的所有文件。 for obj in oss2.ObjectIterator(bucket): wenjian = obj.key # 筛选带+号的文件 if '+' in wenjian: # print(wenjian) # 填写不包含Bucket名称在内源Object的完整路径。 jiahao_name = wenjian # 填写不包含Bucket名称在内目标Object的完整路径,文件名中+替换为空格。 new_name = jiahao_name.replace('+', ' ') # 将examplebucket下的srcobject.txt拷贝至同一Bucket下的destobject.txt。 result = bucket.copy_object(bucket_name, jiahao_name, new_name) # 查看返回结果的状态。如果返回值为200,表示执行成功。 print('处理结果:', result.status) # 删除srcobject.txt。 result_del = bucket.delete_object(jiahao_name) # 查看返回结果的状态。如果返回值为204,表示执行成功。 print('result.status:', result_del.status)
我的老文件还没删除,留着吧,总共100000+的文件,600多个带+号的文件,几分钟就好了,要是手动的话,真是太难了,这种事情我以为就搞过,应该早点学python啊……