如何使用 python SDK 删除 Minio 存储中的路径?
How to remove a path in Minio storage using python SDK?
我可以使用以下命令删除 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 中做同样的事情?我只看到 api 删除对象并从客户端 sdk 中删除对象。请指教如何删除它。
要删除minio中的整个文件夹,只需删除要删除的文件夹中的所有内容即可。
在您的情况下,当您 运行
时,'path' 文件夹将被删除
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
使用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)
我可以使用以下命令删除 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 中做同样的事情?我只看到 api 删除对象并从客户端 sdk 中删除对象。请指教如何删除它。
要删除minio中的整个文件夹,只需删除要删除的文件夹中的所有内容即可。
在您的情况下,当您 运行
时,'path' 文件夹将被删除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
使用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)