python搜索重命名阿里云oss中的文件方法

最近遇到个问题,阿里云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啊……