【Python程序开发系列】对象存储服务AWS S3以及使用示例(案例分析)

这是我的第448篇原创文章。

一、引言

Amazon Simple Storage Service (S3)是 AWS 提供的对象存储服务,具有以下核心特点:

  • 对象存储:存储的是文件对象(而非块存储),每个对象包含数据、元数据和唯一键

  • 无限扩展:可存储任意数量的文件,单个文件最大 5TB

  • 高持久性:承诺 99.999999999%(11个9)的数据持久性

  • 全球访问:通过 HTTP/HTTPS 协议从任何地方访问

  • 成本效益:按实际使用量付费,无需预付费

核心概念

  • Bucket(存储桶):顶级容器,类似文件夹,名称全球唯一

  • Object(对象):存储的基本实体,由键(Key)、值(数据)和元数据组成

    • Key(键):对象在 Bucket 中的唯一标识,类似文件路径

    • Value(值):对象在Bucket这的数据(如文件、字符串、字节等形式)

    • Meta-Data(元数据):包括系统指定的文件类型、创建时间、加密算法以及用户上传时指定的元信息,元数据在对象创建后都无法更改。

    • Tag(标签):可以为对象指定最多10个标签,标签的键和值最大长度时128和256个字符,相较于元数据,标签是可以修改和新增的,它最大的好处是可以结合权限控制、生命周期管理、和数据分析等使用。

二、实现过程

2.1 安装 SDK

pip install boto3 # AWS 官方 Python SDK

2.2 基础配置

方式一:使用 AWS CLI 配置(推荐)

aws configure # 输入 AWS Access Key ID # 输入 AWS Secret Access Key # 输入区域(如 us-east-1)

方式二:代码中直接配置

import boto3 # 创建 S3 客户端 s3 = boto3.client( 's3', aws_access_key_id='你的访问密钥', aws_secret_access_key='你的秘密密钥', region_name='us-east-1' )

2.3 常用操作示例

创建 S3 客户端或资源对象

import boto3 from botocore.exceptions import ClientError # 创建 S3 客户端或资源对象(资源对象更面向对象) s3_client = boto3.client('s3') s3_resource = boto3.resource('s3')

创建 Bucket

def create_bucket(bucket_name): try: s3_client.create_bucket(Bucket=bucket_name) print(f"✅ Bucket '{bucket_name}' 创建成功") except ClientError as e: print(f"❌ 创建失败: {e}")

上传文件

def upload_file(file_path, bucket_name, object_name=None): """上传文件到 S3""" if object_name is None: object_name = file_path.split('/')[-1] try: s3_client.upload_file(file_path, bucket_name, object_name) print(f"✅ 文件 '{file_path}' 上传成功") print(f" s3://{bucket_name}/{object_name}") except ClientError as e: print(f"❌ 上传失败: {e}")

下载文件

def download_file(bucket_name, object_name, file_path): """从 S3 下载文件""" try: s3_client.download_file(bucket_name, object_name, file_path) print(f"✅ 文件下载成功: {file_path}") except ClientError as e: print(f"❌ 下载失败: {e}")

列出 Bucket 中的文件

def list_files(bucket_name): """列出 Bucket 中的所有对象""" try: response = s3_client.list_objects_v2(Bucket=bucket_name) if 'Contents' in response: print(f"\n📁 Bucket '{bucket_name}' 中的文件:") for obj in response['Contents']: print(f" - {obj['Key']} (大小: {obj['Size']} bytes)") else: print(f"Bucket '{bucket_name}' 为空") except ClientError as e: print(f"❌ 列出文件失败: {e}")

删除文件

def delete_file(bucket_name, object_name): """删除 S3 中的文件""" try: s3_client.delete_object(Bucket=bucket_name, Key=object_name) print(f"✅ 文件 '{object_name}' 删除成功") except ClientError as e: print(f"❌ 删除失败: {e}")

生成预签名 URL(临时访问链接)

def generate_presigned_url(bucket_name, object_name, expiration=3600): """生成临时访问 URL""" try: url = s3_client.generate_presigned_url( 'get_object', Params={'Bucket': bucket_name, 'Key': object_name}, ExpiresIn=expiration ) print(f"🔗 临时访问链接({expiration}秒后过期):") print(f" {url}") return url except ClientError as e: print(f"❌ 生成链接失败: {e}") return None

上传文件内容(字符串或字节)

def upload_content(bucket_name, object_name, content): """直接上传内容到 S3""" try: s3_client.put_object( Bucket=bucket_name, Key=object_name, Body=content ) print(f"✅ 内容上传成功: s3://{bucket_name}/{object_name}") except ClientError as e: print(f"❌ 上传失败: {e}")

2.4 高级功能

使用 S3 Resource(更简洁)

s3 = boto3.resource('s3') bucket = s3.Bucket('my-bucket') # 上传 bucket.upload_file('/tmp/test.txt', 'folder/test.txt') # 下载 bucket.download_file('folder/test.txt', '/tmp/test.txt') # 遍历所有对象 for obj in bucket.objects.all(): print(obj.key, obj.last_modified) # 批量删除 bucket.objects.filter(Prefix='temp/').delete()

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1184301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【飞腾平台实时Linux方案系列】第十一篇 - 飞腾平台电力行业实时控制方案设计。

一、简介:为什么"国产芯实时Linux"是电力行业刚需?政策驱动:国家电网 2025 年"100% 自主可控"目标,变电站、配电终端必须替换进口 x86/PLC。场景痛点:变电站合并单元采样间隔 ≤ 1 ms,…

2026年精密钢管/热轧无缝管/结构用碳钢无缝管厂家权威榜单:专注工业传输与机械制造,多场景管材解决方案供应

在高端装备制造、重型机械及液压系统等领域,精密钢管作为核心的“工业骨骼”与“动力血管”,其性能的优劣直接决定了主机设备的可靠性、精度与使用寿命。尤其是珩磨管、冷拔精密管和厚壁无缝管等产品,对尺寸公差、表…

如何开通快捷支付?

流程十分简便,只需登录个人网上银行账户,找到快捷支付功能入口,按页面提示完成操作即可开通。快捷支付有哪些优势?开通后能享受这些便利:1. 高效便捷:凭银行卡预留手机号验证即可完成支付,无需手…

探索稿定设计:专业封面模板与便捷在线制作体验

在信息传播节奏日益加快的当下,封面作为内容的 “视觉入口”,直接决定了受众的第一感知。无论是书籍画册、学术报告、企业宣传册,还是小红书动态、微信朋友圈、抖音视频封面,亦或是 PDF 文档、PPT 首页,一款主题契合、…

如何建设一个高质量官网?建设企业网站常见问题集锦

绝大多数的企业都有自己的网站,但网站的质量没有统一的标准,因为企业官网的建设目的本身就各有不同,每家企业所处的发展阶段、战略目标也各异。那么,我们怎么来看,现在的企业网站究竟存在哪些问题呢?下面&a…

解构AIGC落地困局:低代码如何成为普惠AI的技术桥梁

当大模型的浪潮席卷整个IT圈,AIGC早已从概念走向实践,但一个残酷的现实摆在眼前:90%的企业仍无法真正享受到AI技术的红利。不是因为模型不够强大,也不是因为需求不够迫切,而是卡在了“技术落地的最后一公里”——复杂的…

舟山桃花岛:山海奇观里的武侠江湖

桃花岛,位于浙江省舟山市普陀区东南部的海域,是舟山群岛中的第七大岛,总面积约43.1平方公里。它与“海天佛国”普陀山、“沙雕故乡”朱家尖隔港相望,共同构成了普陀旅游的核心区域。这座岛屿因其与金庸武侠小说的深厚渊源而闻名&a…

SSCOM:硬件通信调试领域的多理论融合实践

目录 引言 一、通信理论 1.1 协议兼容性理论 1.2 异步通信同步化理论 二、自动化控制理论 2.1 脚本化测试理论 2.2 事件驱动架构理论 三、数据科学理论 3.1 时序数据分析理论 3.2 可视化交互理论 四、应用价值与行业影响 4.1 效率提升量化分析 4.2 行业标准化推动 结论 引…

开源APS排产系统,出货计划如何成为企业降本增效的关键?

在现代制造业生产管理中,企业不仅需要高效地生产产品,更需要确保产品在正确的时间交付给客户。APS(高级计划与排程)系统的出货计划功能,正是通过智能算法将库存、生产能力和客户需求精准匹配,为企业提供可视…

多个企业如何显示在同一张GRS证书上

多个企业在同一张GRS证书上体现,是可以的,但有条件要求。 常见已下几种情况,是否可以呢? 1.我的工厂和我的贸易公司,能不能同时在一张GRS证书上体现? 2.我是贸易公司,我拿货的工厂也没有GRS认证…

SourceTree3.4.27 开始存在commit面板滚动卡住的问题

看到 jira 上也有大量提交 https://jira.atlassian.com/browse/SRCTREEWIN-14551 我采用的解决方案是: Just wanted to add that i experience this issue too on a large codebase ( IfcOpenshell )hanging: fetching commits never finishes since 3.4.27 3.4…

GEO 系统开发哪家强?全域流量优化指南

AI大模型的不断成熟,让越来越多的人开始将它作为获取信息的主要途径的同时,也让一大批创业者察觉到了它背后的商机,产生了布局GEO赛道的想法,并从各个渠道打听起了GEO系统开发哪家强的问题。的确,根据Gartner 预测&…

2026年打包机怎么选?揭秘优质封箱打包机厂家,折盖封箱机/胶带封箱机/自动封箱机/纸箱码垛机,打包机源头厂家推荐 - 品牌推荐师

随着制造业自动化升级加速,封箱打包机作为物流包装环节的核心设备,其性能稳定性、技术适配性及服务响应能力直接影响企业生产效率。当前市场上,设备同质化严重、售后服务参差不齐、非标定制能力薄弱等问题频发,导致…

工程师招聘综合:BOSMA博冠在招岗位

一、算法工程师 岗位职责: 主导工业产品表面缺陷识别算法的研发与优化;负责模型全生命周期:数据预处理策略制定、模型训练调参、性能评估与迭代优化;将模型部署到实际应用环境(如嵌入式设备、云端或边缘计算平台&…

《深入 Python 序列化世界:msgpack vs pickle 的本质区别与安全真相》

《深入 Python 序列化世界:msgpack vs pickle 的本质区别与安全真相》 一、开篇:为什么我们必须重新审视 Python 的序列化? 如果你写过 Python Web 服务、分布式任务、缓存系统、微服务通信、模型持久化,序列化一定是绕不过去的主…

MATLAB图像增强:开启视觉盛宴之旅

MATLAB图像增强代码 代码些许复杂,由本人一个朋友编写 是机器视觉和图像增强领域的应用,有gui界面,可以载入原图和参照强化的图像,读取参照图像的RGB或者HSV 分量,并强化原图像, 运行,corrction…

Vuex持久化方案:避免刷新页面数据丢失

Vuex持久化方案:避免刷新页面数据丢失 在Vue.js应用开发中,Vuex作为核心状态管理工具,通过集中式存储管理应用的所有组件状态。然而,由于Vuex的状态默认存储在内存中,当页面刷新时,浏览器会重新加载JavaSc…

深入解析MySQL9主从复制架构详解从原理到实战

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

经典 37kw 永磁同步电机设计案例分享

经典37kw,3000RPM,112Nm, 6极36槽永磁同步电机(PMSM)设计案例(V型磁钢),该案例已制作样机,方案成熟,运行稳定,具有全套图纸,(图纸另外计算)可直接用于生产,齿…