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

时间:2019-08-26 20:26:56

标签: 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)

在这里,我有一个包含许多对象的路径。 Bucket/path/objects,在这里我要删除整个路径文件夹。在linux中,我可以发出rm -rf path来递归地删除其内容。使用Python客户端SDK在Minio中如何做同样的事情?我只看到用于删除对象和从客户端SDK删除对象的api。请建议如何删除它。

remove path

2 个答案:

答案 0 :(得分:1)

要删除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的folderName应该是绝对路径,即,如果存储桶结构如下所示: test / path / path2 ,并且您要删除 path2 文件夹,需要将 path / path2 作为folderName传递给deleteFunction

Reference: MinIO | Python Client API Reference

答案 1 :(得分:1)

使用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)