返回顶部
首页 > 资讯 > 后端开发 > Python >七牛云的python sdk 批量删除资源的操作方法
  • 498
分享到

七牛云的python sdk 批量删除资源的操作方法

2024-04-02 19:04:59 498人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

今天做项目的时候用到七牛云,关于对资源的操作是在后端做的,用的SDK,但是,在网上没找到详细的解析,官方文档也没有太详细的解说,所以无奈只好看下源码 这里做一下简单的记录 fro

今天做项目的时候用到七牛云,关于对资源的操作是在后端做的,用的SDK,但是,在网上没找到详细的解析,官方文档也没有太详细的解说,所以无奈只好看下源码

这里做一下简单的记录


from qiniu import build_batch_delete, Auth, BucketManager

#需要填写你的 Access Key 和 Secret Key,这个在你的个人中心里有
access_key = 'Access_Key'
secret_key = 'Secret_Key'

#构建鉴权对象
q = Auth(access_key, secret_key)

#初始化BucketManager

bucket = BucketManager(q)

# 这里就是你的七牛云里的空间名称
bucket_name = "test"# 例子, 文件名 数组
keys = ['test.mp4','test1.mp4', ''test2.mp4'', ''test3.mp4'']

ops = build_batch_delete(bucket_name, keys)

ret, info = bucket.batch(ops)
print(info)

以上就是批量删除的全部代码,下面做一下详细的解说

从build_batch_delete 函数进去,进入bucket.py文件下的 build_batch_delete 方法里

bucket.py


def build_batch_delete(bucket, keys):   # 这里的 bucket 就是上文的bucket_name 空间名称,keys 及时文件列表
    return _one_key_batch('delete', bucket, keys)

def _one_key_batch(operation, bucket, keys):   # 这里给了个默认参数 delete 删除操作,
    return [_build_op(operation, entry(bucket, key)) for key in keys]

下面我们看看   entry 方法里做了什么

utils.py


def entry(bucket, key):
    """计算七牛api中的数据格式:

    entry规格参考 https://developer.qiniu.com/kodo/api/1276/data-fORMat

    Args:
        bucket: 待操作的空间名
        key:    待操作的文件名

    Returns:
        符合七牛API规格的数据格式
    """
    if key is None:
        return urlsafe_base64_encode('{0}'.format(bucket))
    else:
        return urlsafe_base64_encode('{0}:{1}'.format(bucket, key))
如果key 不存在 数据就是空间名,key存在就做了个字符串格式化
例如:第一个key 是  test.mp4   那么 数据就是 "test:test.mp4"
然后将  "test:test.mp4" 传入  urlsafe_base64_encode   我们再看看  urlsafe_base64_encode  做了什么

from base64 import urlsafe_b64encode
def urlsafe_base64_encode(data):
    """urlsafe的base64编码:

    对提供的数据进行urlsafe的base64编码。规格参考:
    Https://developer.qiniu.com/kodo/manual/1231/appendix#1

    Args:
        data: 待编码的数据,一般为字符串

    Returns:
        编码后的字符串
    """
    ret = urlsafe_b64encode(b(data))
    return s(ret)

返回的数据是 bytes 类型 又传到s方法里做了一遍解码 为字符串类型

compat.py


 def b(data):
        if isinstance(data, str):
            return data.encode('utf-8')
        return data

最后data 被传入 b方法 做了一下utf-8  编码

def s(data):
    if isinstance(data, bytes):
        data = data.decode('utf-8')
    return data

最后 entry 函数 返回的 是'ZGRkZDpkZGRfMzMubXA0' 类型数据 结合上文 我们再看看 _build_op 方法做了什么

bucket.py


def _build_op(*args):  这里 出入args 为("delete",'ZGRkZDpkZGRfMzMubXA0' )
    return '/'.join(args)   # join  操作以后  为   "delete/ZGRkZDpkZGRfMzMubXA0"

到这 build_batch_delete 方法就执行完了 结合上面示例,该方法 返回的是一个列表 ["delete/ZGRkZDpkZGRfMzMubXA0","delete/ZGRkZDpkZGRfMzMubXA0","delete/ZGRkZDpkZGRfMzMubXA0","delete/ZGRkZDpkZGRfMzMubXA0"]

然后 再看 bucket.batch(ops) 里 做了 什么


    def batch(self, operations):
        """批量操作:

        在单次请求中进行多个资源管理操作,具体规格参考:
        http://developer.qiniu.com/docs/v6/api/reference/rs/batch.html

        Args:
            operations: 资源管理操作数组,可通过

        Returns:
            一个dict变量,返回结果类似:
                [
                    { "code": <HttpCode int>, "data": <Data> },
                    { "code": <HttpCode int> },
                    { "code": <HttpCode int> },
                    { "code": <HttpCode int> },
                    { "code": <HttpCode int>, "data": { "error": "<ErrorMessage string>" } },
                    ...
                ]
            一个ResponseInfo对象
        """
        url = '{0}/batch'.format(config.get_default('default_rs_host'))   
        return self.__post(url, dict(op=operations))

config.py


RS_HOST = 'http://rs.qiniu.com'  # 管理操作Host
RSF_HOST = 'http://rsf.qbox.me'  # 列举操作Host
API_HOST = 'http://api.qiniu.com'  # 数据处理操作Host
UC_HOST = 'https://uc.qbox.me'  # 获取空间信息Host

_BLOCK_SIZE = 1024 * 1024 * 4  # 断点续传分块大小,该参数为接口规格,暂不支持修改

_config = {
    'default_zone': zone.Zone(),
    'default_rs_host': RS_HOST,
    'default_rsf_host': RSF_HOST,
    'default_api_host': API_HOST,
    'default_uc_host': UC_HOST,
    'connection_timeout': 30,  # 链接超时为时间为30s
    'connection_retries': 3,  # 链接重试次数为3次
    'connection_pool': 10,  # 链接池个数为10
    'default_upload_threshold': 2 * _BLOCK_SIZE  # put_file上传方式的临界默认值
}

从 配置文件里 取出跟路径 做拼接

得 URL =http://rs.qiniu.com/batch

dict(op=operations) 得 {'op': ['delete/ZGRkZDpkZGRfMzMubXA0', 'delete/ZGRkZDpkZGRfMzMubXA0', 'delete/ZGRkZDpkZGRfMzMubXA0', 'delete/ZGRkZDpkZGRfMzMubXA0']}

再然后就是 调post请求 将删除请求 和 数据发过去

最后返回值 得提一下

http.py


def __return_wrapper(resp):
    if resp.status_code != 200 or resp.headers.get('X-Reqid') is None:
        return None, ResponseInfo(resp)
    resp.encoding = 'utf-8'
    ret = resp.JSON() if resp.text != '' else {}
    if ret is None:  # json null
        ret = {}
    return ret, ResponseInfo(resp)

在这个文件里 还单独处理了一下 响应体 所以最后返回的是一个元祖,可以用两个参数接受

以上就是对 七牛云 这个删除 操作 做的一个源码分析,,有不对的地方请大佬指出。

到此这篇关于python sdk 批量删除资源的操作方法的文章就介绍到这了,更多相关Python sdk 是如何 批量删除资源的内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 七牛云的python sdk 批量删除资源的操作方法

本文链接: https://lsjlt.com/news/154585.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 七牛云的python sdk 批量删除资源的操作方法
    今天做项目的时候用到七牛云,关于对资源的操作是在后端做的,用的SDK,但是,在网上没找到详细的解析,官方文档也没有太详细的解说,所以无奈只好看下源码 这里做一下简单的记录 fro...
    99+
    2024-04-02
  • Docker批量删除容器或镜像的操作方法
    目录删除所有容器删除所有镜像按条件删除镜像删除所有容器 一、首先需要停止所有运行中的容器 docker stop`docker ps -a -q` docker ps -a -q 意...
    99+
    2023-03-19
    Docker 批量删除镜像 Docker 批量删除容器
  • Redis批量删除KEY的方法
    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作。 redis-cli keys “*” | xarg...
    99+
    2022-06-04
    批量 方法 Redis
  • 数据库如何实现批量删除数据的操作方法
    这篇文章主要介绍数据库如何实现批量删除数据的操作方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!package com.mescs.baseinfo.utils; import ...
    99+
    2024-04-02
  • mysql实现批量删除的方法
    小编给大家分享一下mysql实现批量删除的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql实现批量删除的方法:使用s...
    99+
    2024-04-02
  • Python 批量操作设备的实现方法
    这篇文章主要讲解了“Python 批量操作设备的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python 批量操作设备的实现方法”吧!目录背景需求- 方案一- 方案二方案三准备工作...
    99+
    2023-06-20
  • mysql批量删除多个表的方法
    小编给大家分享一下mysql批量删除多个表的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql批量删除多个表的方法:使...
    99+
    2024-04-02
  • redis的批量删除方法是什么
    Redis的批量删除方法可以使用DEL命令进行操作。DEL命令用于删除一个或多个指定的键(key)。它可以一次删除一个或多个键,可以...
    99+
    2023-09-11
    redis
  • redis模糊批量删除key的方法
    目录一、命令行删除二、golang代码删除一、命令行删除 Redis-cli -h 172.18.255.99 -p 6379 -n 6 -a 123456 KEYS "websocket127.0.0.1:5*" | ...
    99+
    2022-12-16
    redis模糊删除key redis模糊批量清除key redis批量清除
  • mysql中批量删除数据的方法
    mysql中批量删除数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql中批量删除数据的方法:首先找出符合条...
    99+
    2022-11-30
    mysql
  • Hibernate批量更新和批量删除的方法是什么
    这篇文章主要介绍“Hibernate批量更新和批量删除的方法是什么”,在日常操作中,相信很多人在Hibernate批量更新和批量删除的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate...
    99+
    2023-06-17
  • Elasticsearch文档批量操作的方法
    本篇内容介绍了“Elasticsearch文档批量操作的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Elasticsearch的文档操...
    99+
    2023-06-30
  • Android使用ListView批量删除item的方法
    本文实例讲述了Android使用ListView批量删除item的方法。分享给大家供大家参考,具体如下: 利用CheckBox选中一个或多个item,最后批量删除它们。 程序运...
    99+
    2022-06-06
    方法 listview Android
  • Pythondrop()删除行列的操作方法
    在进行特征工程、划分数据集的工作中,drop()函数都能派上用场。它可以轻松剔除数据、操作列和操作行等。 drop()详细的语法如下: 删除行是index,删除列是columns: ...
    99+
    2023-05-15
    Python drop()删除行列 drop()删除行列
  • linux下批量删除utf8 bom的实现方法
    低版本的gcc编译包含bom的文件会报错 xxx.cpp:1: error: stray ‘357' in program xxx.cpp:1: error: stray ‘273' in program ...
    99+
    2022-06-04
    批量 方法 linux
  • shell脚本批量删除es索引的方法
    发现elasticsearch集群的状态是red,unassign的分片数很多,看了下都是些旧的日期的索引(应该是定时任务删除失败导致的)。 curl -XGET ip:port/_cat/shards | grep...
    99+
    2022-06-04
    批量删除es索引 shell脚本批量删除es索引的方法
  • sql批量删除数据的方法是什么
    要批量删除数据,可以使用以下方法之一:1. 使用DELETE语句和WHERE子句:可以使用DELETE语句结合WHE...
    99+
    2023-09-16
    sql
  • linux批量删除文件的方法是什么
    在Linux中,有多种方法可以批量删除文件。以下是几种常用的方法:1. 使用通配符删除:可以使用通配符来指定要删除的文件的模式。例如...
    99+
    2023-08-21
    linux
  • sqlserver批量删除数据的方法是什么
    在SQL Server中,可以使用DELETE语句来批量删除数据。以下是一个示例: DELETE FROM tableNam...
    99+
    2024-04-12
    sqlserver
  • MySQL批量杀进程的操作方法
    下文我给大家简单讲讲关于MySQL批量杀进程的操作方法,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完MySQL批量杀进程的操作方法对大家多少有点帮助吧。 一、通过S...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作