为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 python SDK 删除 Minio 存储中的路径?

如何使用 python SDK 删除 Minio 存储中的路径?

慕容708150 2022-05-11 16:27:43
我可以使用以下命令删除 minio 中的对象。from minio import Miniofrom minio.error import ResponseErrorminioClient = Minio('localhost:9000',                    access_key='your-key',                    secret_key='your-key', secure=False)#Remove an object.try:    minioClient.remove_object('test', 'sampletest')except ResponseError as err:    print(err)在这里,我有一个包含许多对象的路径。Bucket/path/objects,这里我要删除整个路径文件夹。在 linux 中,我可以发出rm -rf path递归删除其内容。如何使用 Python 客户端 SDK 在 Minio 中做同样的事情?我只看到 api 来删除对象并从客户端 sdk 中删除对象。请建议如何删除它。
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

使用pyminio来做到这一点:


from pyminio import Pyminio


pyminio_client = Pyminio.from_credentials(

    endpoint='<your-minio-endpoint>',  # e.g. "localhost:9000/"

    access_key='<your-minio-access-key>',

    secret_key='<your-minio-secret-key>'

)


pyminio_client.rm('/test/sampletest', recursive=True)


查看完整回答
反对 回复 2022-05-11
?
BIG阳

TA贡献1859条经验 获得超6个赞

要删除 minio 中的整个文件夹,您只需删除要删除的文件夹的所有内容。


在您的情况下,运行时将删除“路径”文件夹


minioClient.remove_object('test','path/p1.jpg')

minioClient.remove_object('test','path/scene1.jpg')


要以更好的方式做到这一点,您可以使用带有前缀和递归参数的 list_objects,如下所示:


from minio import Minio

from minio.error import ResponseError


minioClient = Minio('localhost:9000',

                    access_key='your-key',

                    secret_key='your-key', secure=False)


def deleteFolder2(bucketname, folderName):

    # Delete using "remove_object"

    objects_to_delete = minioClient.list_objects(bucketname, prefix=folderName, recursive=True)

    for obj in objects_to_delete:

        minioClient.remove_object(bucketname, obj.object_name)



def deleteFolder1(bucketname, folderName):

    # Delete using "remove_objects"

    objects_to_delete = minioClient.list_objects(bucketname, prefix=folderName, recursive=True)

    objects_to_delete = [x.object_name for x in objects_to_delete]

    for del_err in minioClient.remove_objects(bucketname, objects_to_delete):

        print("Deletion Error: {}".format(del_err))



try:

    # Use either deleteFolder1 or deleteFolder2

    deleteFolder1('test', 'path')

    deleteFolder2('test', 'path')

except ResponseError as err:

    print(err)

笔记:

  • deleteFolder1 中 remove_objects 的返回值是一个迭代器。由于该函数是惰性的,默认情况下不会评估。必须评估上面返回的迭代器(例如使用循环),因为它在 deleteFolder1 中完成。

  • 仅当服务对其执行删除操作时出现错误时,迭代器才会包含项目。每个项目都包含有删除错误的对象的错误信息。

  • 您传递给 deleteFunction 的文件夹名称应该是绝对路径,即如果存储桶结构如下test/path/path2并且如果要删除path2文件夹,则需要将path/path2作为文件夹名称传递给 deleteFunction


查看完整回答
反对 回复 2022-05-11
  • 2 回答
  • 0 关注
  • 1034 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号