当前位置:首页>python>Python 操作 MinIO 对象存储的方法,实用

Python 操作 MinIO 对象存储的方法,实用

  • 2026-10-21 13:28:00
Python 操作 MinIO 对象存储的方法,实用

MinIO 是一个高性能的对象存储系统,兼容 Amazon S3 API。通过 MinIOPython SDK,开发者可以轻松地在 Python 应用中集成对象存储功能。本文将介绍 MinIO Python SDK 的使用方法、典型应用场景和代码示例。

往期阅读>>>

Python 为什么会成为AI时代的头部语言

Python 40个常用的列表推导式

Python 50个提高代码开发效率的方法

Python 自动检测服务HTTPS证书过期时间并发送预警

Python 自动化操作Redis的15个实用脚本

Python 自动化管理Jenkins的15个实用脚本,提升效率

Python copyparty搭建轻量的文件服务器的方法

Python 实现2FA认证的方法,提升安全性

Python 封装20个常用API接口,提升开发效率

App2Docker:如何无需编写Dockerfile也可以创建容器镜像

Python 集成 Nacos 配置中心的方法

Python 35个JSON数据处理方法

Python 字典与列表的20个核心技巧

Python 15个文本分析的库,提升效率

Python 15个Pandas技巧,提升数据分析效率

Python 运维中30个常用的库,提升效率

Python调用远程接口的方法

Python 提取HTML文本的方法,提升效率

Python 应用容器化方法:实现“一次部署,处处运行”

Python 自动化识别Nginx配置并导出为excel文件,提升Nginx管理效率

Python 5个常见的异步任务处理框架

Python数据科学常见的30个库

Python 50个实用代码片段,优雅高效

安装方法

首先需要安装 MinIO Python SDK,要求 Python 版本在 3.7 及以上:

pip install minio

核心功能与使用场景

1. 数据备份与归档

MinIO 适用于大规模数据备份,支持版本控制和生命周期管理。

2. 静态资源存储

网站图片、文档等静态资源可以存储在 MinIO 中,通过 CDN 加速访问。

3. 大数据处理

与 Spark、Hadoop 等大数据工具集成,作为数据湖的存储后端。

4. 微服务架构

在微服务架构中作为共享存储层,实现服务间的数据交换。

代码示例

初始化客户端

from minio import Miniofrom minio.error import S3Error# 初始化 MinIO 客户端minio_client = Minio(    "play.min.io:443",  # MinIO 服务器地址    access_key="your-access-key",  # 访问密钥    secret_key="your-secret-key",  # 秘密密钥    secure=True  # 使用 HTTPS)

存储桶管理

def manage_buckets():    # 创建存储桶    try:        minio_client.make_bucket("my-documents")        print("存储桶创建成功")    except S3Error as err:        print(f"创建存储桶失败: {err}")    # 列出所有存储桶    buckets = minio_client.list_buckets()    for bucket in buckets:        print(f"存储桶: {bucket.name}, 创建时间: {bucket.creation_date}")

文件上传操作

def upload_files():    # 上传本地文件    minio_client.fput_object(        "my-documents",  # 存储桶名称        "reports/annual-report.pdf",  # 对象名称(包含路径)        "/local/path/annual-report.pdf"  # 本地文件路径    )    # 上传字节数据    data = b"Hello, MinIO! This is a text file content."    minio_client.put_object(        "my-documents",        "test/hello.txt",        data,        len(data)    )

文件下载操作

def download_files():    # 下载文件到本地    minio_client.fget_object(        "my-documents",        "reports/annual-report.pdf",        "/local/download/annual-report.pdf"    )    # 获取文件数据流    response = minio_client.get_object("my-documents", "test/hello.txt")    content = response.read()    print(f"文件内容: {content.decode('utf-8')}")

文件列表查询

def list_objects():    # 列出存储桶中的所有对象    objects = minio_client.list_objects("my-documents")    print("存储桶中的文件列表:")    for obj in objects:        print(f"- {obj.object_name} (大小: {obj.size} 字节)")    # 带前缀过滤的列表    images = minio_client.list_objects("my-documents", prefix="images/")    print("\n图片文件:")    for img in images:        print(f"- {img.object_name}")

文件管理操作

def file_management():    # 检查文件是否存在    if minio_client.stat_object("my-documents", "reports/annual-report.pdf"):        print("文件存在")    # 复制文件    minio_client.copy_object(        "my-documents", "reports/annual-report-copy.pdf",        "my-documents/reports/annual-report.pdf"    )    # 删除文件    minio_client.remove_object("my-documents", "reports/annual-report-copy.pdf")

完整示例:图片管理应用

class ImageManager:    def __init__(self, endpoint, access_key, secret_key):        self.client = Minio(            endpoint,            access_key=access_key,            secret_key=secret_key,            secure=True        )        self.bucket_name = "images-bucket"    def setup_bucket(self):        if not self.client.bucket_exists(self.bucket_name):            self.client.make_bucket(self.bucket_name)    def upload_image(self, image_path, image_name):        self.client.fput_object(            self.bucket_name,            f"originals/{image_name}",            image_path        )        print(f"图片 {image_name} 上传成功")    def generate_thumbnail_url(self, image_name, expiry=3600):        return self.client.presigned_get_object(            self.bucket_name,            f"originals/{image_name}",            expires=expiry        )# 使用示例manager = ImageManager("play.min.io:443", "your-key", "your-secret")manager.setup_bucket()manager.upload_image("/path/to/photo.jpg", "vacation-photo.jpg")thumbnail_url = manager.generate_thumbnail_url("vacation-photo.jpg")

MinIO Python SDK 提供了简单易用的接口来操作对象存储。开发者可以快速在 Python 应用中集成 MinIO 功能,满足各种存储需求。

1、连接管理: 重用客户端实例,避免频繁创建新连接;

2、错误处理: 使用 try-except 块捕获 S3Error 异常;

3、权限控制: 合理设置存储桶和对象的访问权限;

4、性能优化: 对大文件使用分片上传,对小文件进行批量操作;

在实际使用中,可以参考官方文档获取最新的 API 信息和最佳实践。

  • 官方文档:  https://min.io/docs/minio/linux/developers/python/minio-py.html 

  • GitHub 仓库:  https://github.com/minio/minio-py 

  • API 参考:  https://min.io/docs/minio/linux/developers/python/API.html 

“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

想高效学习Python?下面三本精选好书满足你的不同需求!

《流畅的Python(第2版)》——Python进阶必读!深入讲解高级特性与最佳实践,适合想精进的开发者。

《Python从新手到高手》:初学者首选,79元系统学习全栈技能。

《Python数据分析:从零基础入门到案例实战》——数据科学利器!手把手教你用Python处理数据,实战案例学完就能用。

三本书均支持先用后付、运费险和7天无理由退货,放心购买!点击“购买”按钮,立即开启你的Python学习之旅吧!

▼点击下方,即可购书
------也可以加入知识库与更多人一起学习------

https://ima.qq.com/wiki/?shareId=f2628818f0874da17b71ffa0e5e8408114e7dbad46f1745bbd1cc1365277631c

最新文章

随机文章