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

aja*_*esh 2 python minio

我可以使用以下命令删除 minio 中的对象。

from minio import Minio
from minio.error import ResponseError

minioClient = 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)
Run Code Online (Sandbox Code Playgroud)

这里我有一条包含许多对象的路径。Bucket/path/objects,这里我想删除整个路径文件夹。在Linux中,我可以发出rm -rf path递归删除其内容的命令。如何使用 Python 客户端 SDK 在 Minio 中执行相同操作?我只看到用于删除对象和从客户端 SDK 中删除对象的 api。请建议如何删除它。

删除路径

小智 5

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

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

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

Run Code Online (Sandbox Code Playgroud)

为了以更好的方式做到这一点,您可以使用带有前缀和递归参数的 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)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • deleteFolder1 中的remove_objects 的返回值是一个迭代器。由于该函数是惰性函数,默认情况下不会计算。上面返回的迭代器必须像在deleteFolder1 中那样进行评估(例如使用循环)。
  • 仅当服务对其执行删除操作时出现错误时,迭代器才会包含项目。每个项目都包含发生删除错误的对象的错误信息。
  • 您传递给deleteFunction的folderName应该是绝对路径,即,如果存储桶结构如下test/path/path2,并且如果您想删除path2文件夹,则需要将path/path2作为folderName传递给deleteFunction

参考:MinIO | Python 客户端 API 参考

  • 对于现在登陆这里的任何人:您需要构建一个带有对象名称的DeleteObject列表(from minio.deleteobjects import DeleteObject),然后将其传递给remove_objects。例如,您可以按如下方式修改deleteFolder1:[DeleteObject(x.object_name) for x inobjects_to_delete] (2认同)