python使用boto3访问S3对象存储并列出百万级文件对象的存储信息

news2024/9/28 23:24:32

本文提供了在python3环境里使用boto3访问S3对象存储,并列出百万级文件对象的存储信息的示例代码。

一、测试环境

操作系统和python版本如下:

[root@localhost boto3]# cat /etc/os-release 
NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"

[root@localhost boto3]# python3 --version
Python 3.9.9

二、准备运行环境

1、所需基础whl软件包
[root@localhost boto3]# ll packages/
total 13M
-rw-r-----. 1 AAAA AAAA 137K Aug  2 16:06 boto3-1.34.105-py3-none-any.whl
-rw-r-----. 1 AAAA AAAA  12M Aug  2 16:06 botocore-1.34.105-py3-none-any.whl
-rw-r-----. 1 AAAA AAAA  20K Aug  2 16:06 jmespath-1.0.1-py3-none-any.whl
-rw-r-----. 1 AAAA AAAA 225K Aug  2 16:06 python_dateutil-2.9.0.post0-py2.py3-none-any.whl
-rw-r-----. 1 AAAA AAAA  81K Aug  2 16:06 s3transfer-0.10.1-py3-none-any.whl
-rw-r-----. 1 AAAA AAAA  11K Aug  2 16:06 six-1.16.0-py2.py3-none-any.whl
-rw-r-----. 1 AAAA AAAA 141K Aug  2 16:06 urllib3-1.26.18-py2.py3-none-any.whl
2、启用虚拟环境并安装whl包
[root@localhost boto3]# python3.9 -m venv myenv
[root@localhost boto3]# source myenv/bin/activate 
(myenv) [root@localhost boto3]# ll
total 8.0K
drwxr-x---. 5 root root   74 Aug  2 16:09 myenv
drwxr-x---. 2 AAAA AAAA 4.0K Aug  2 16:06 packages
(myenv) [root@localhost boto3]# cd packages/
(myenv) [root@localhost packages]# pip3 install *
Processing ./boto3-1.34.105-py3-none-any.whl
Processing ./botocore-1.34.105-py3-none-any.whl
Processing ./jmespath-1.0.1-py3-none-any.whl
Processing ./python_dateutil-2.9.0.post0-py2.py3-none-any.whl
Processing ./s3transfer-0.10.1-py3-none-any.whl
Processing ./six-1.16.0-py2.py3-none-any.whl
Processing ./urllib3-1.26.18-py2.py3-none-any.whl
Installing collected packages: six, urllib3, python-dateutil, jmespath, botocore, s3transfer, boto3
Successfully installed boto3-1.34.105 botocore-1.34.105 jmespath-1.0.1 python-dateutil-2.9.0.post0 s3transfer-0.10.1 six-1.16.0 urllib3-1.26.18
(myenv) [root@localhost packages]#

三、测试代码

1、编写连接文件

连接参数也可以直接写在代码文件中,但本人喜欢将配置和代码进行分离,故将配置单独保存

(myenv) [root@localhost boto3]# cat apiconf.py 
setting = {"endpoint_url":"http://1192.168.188.13:8080","access_key":"48ES5QR8J70IB3KC93F4","secret_key":"TkhooozMPDd26XP3SbPJSfgcViB0ArShU4sBd33H"} 
2、列出所有可用桶

编写代码:

(myenv) [root@localhost boto3]# cat bucketList.py 
#!/usr/bin/python
#coding=utf-8
#for python 3.*.*

##__author__='daigjianbing'

import boto3
import apiconf

# 获取 endpoint、access key 和 secret key
endpoint_url = apiconf.setting["endpoint_url"]
access_key = apiconf.setting["access_key"]
secret_key = apiconf.setting["secret_key"]
 
# 创建 S3 客户端实例并指定 endpoint 和凭证信息
s3 = boto3.client('s3',
                  endpoint_url=endpoint_url,
                  aws_access_key_id=access_key,
                  aws_secret_access_key=secret_key,
                  verify=False)  # 如果不需要SSL验证,可以设置verify=False,即http或者https
 
# 列出所有的桶
responses = s3.list_buckets()
buckets = [bucket['Name'] for bucket in responses['Buckets']]
#print('All of Buckets:', buckets)
for bucket in buckets:
    print(bucket)

执行测试:

(myenv) [root@localhost boto3]# python bucketList.py    
1541412547839
1541753844586
1543198691659
1543198885291
1543198895193
1543307983636
....
3、列出桶中的对象

编写代码(以测试一个包含4万余对象的桶为例):

(myenv) [root@localhost boto3]# cat filesListInBucket.py 
#!/usr/bin/python
#coding=utf-8
#for python 3.*.*

##__author__='daigjianbing'

import boto3
import apiconf
import time

# 获取 endpoint、access key 和 secret key
endpoint_url = apiconf.setting["endpoint_url"]
access_key = apiconf.setting["access_key"]
secret_key = apiconf.setting["secret_key"]
 
# 创建 S3 客户端实例并指定 endpoint 和凭证信息
s3 = boto3.resource('s3',
                  endpoint_url=endpoint_url,
                  aws_access_key_id=access_key,
                  aws_secret_access_key=secret_key,
                  verify=False)  # 不需要SSL验证,设置verify=False

bucket_name = 'myfile'
#连接桶
bucket = s3.Bucket(bucket_name)

objects = []
n = 0
# 遍历存储桶中的所有对象  
for obj in bucket.objects.all():  
    key = obj.key  
    timestep = obj.last_modified
    n = n + 1
    #print(key, timestep)
    print("objectNUM:",n)             #打印当前对象序数
    objects.append((key, timestep))

# 按LastModified时间戳排序(降序)
objects.sort(key=lambda x: x[1], reverse=True)    #按对象文件存储时间降序排列

outtxt=""
# 打印排序后的结果  
for key, timestamp in objects:
    timestamptxt=timestamp.strftime('%Y-%m-%d_%H:%M:%S')         #定义文件时间输出格式
    print(key, timestamptxt)
    outtxt=outtxt+str(key)+" "+timestamptxt+"\n"
todaystr=time.strftime('%Y%m%d',time.localtime(time.time()))     #获取当前日期信息
outfilename=bucket_name+"-"+todaystr+'.log'                      #指定输出结果文件名称
with open(outfilename, 'w') as f:
        f.write(outtxt)

以上代码遍历桶中所有对象,并按对象的保存时间进行倒序排列,在屏幕打印输出对象key和时间,同时将结果保存到“桶名-年月日”的日志文件中。

实测执行:

(myenv) [root@localhost boto3]# python filesListInBucket.py 
objectNUM: 1
...
objectNUM: 41741
47c426e6adbb4570937b676281a273e9.mp3 2024-08-05_10:12:08
...
00605045-645f-4572-bf61-87a6227a97da.zip 2019-06-13_09:04:29
(myenv) [root@localhost boto3]# cat myfile-20240805.log
47c426e6adbb4570937b676281a273e9.mp3 2024-08-05_10:12:08
...
00605045-645f-4572-bf61-87a6227a97da.zip 2019-06-13_09:04:29
(myenv) [root@localhost boto3]]# cat myfile-20240805.log |wc -l
41741

四、补充

s3.list_objects_v2(Bucket='****') ,也可以列出的桶中的对象信息,但它是按页输出,默认1000个对象为1页,缺省只列出1000个对象信息;

而用s3.Bucket(bucket_name)的objects.all(),则可以列出的桶中所有对象信息,实测百万级对象信息输出没有任何问题,只是需要的等待的时间较长而已。

其余文件操作,可以参照编写代码执行。

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

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

相关文章

【实战指南】轻松上手:部署与应用清华智谱GLM大模型

部署一个自己的大模型,没事的时候玩两下,这可能是很多技术同学想做但又迟迟没下手的事情,没下手的原因很可能是成本太高,近万元的RTX3090显卡,想想都肉疼,又或者官方的部署说明过于简单,安装的时…

GreatSQL 8.0.32-26 今日发布

GreatSQL 8.0.32-26 今日发布 版本信息 发布时间:2024年08月05日 版本号:8.0.32-26, Revision a68b3034c3d 下载链接:https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-26 用户手册:https://greatsql.cn/docs…

【知识专栏丨python数分实战】天猫订单数据分析及可视化|taobao天猫订单接口

今天这篇文章将给大家介绍天猫订单数据分析及可视化案例。 import pandas as pdimport numpy as npfrom pyecharts.charts import Pie,Bar,Line,Map,Map3D,Funnelfrom pyecharts import options as optsimport matplotlib.pyplot as pltimport warningsimport seaborn as snsfr…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)

软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的基础定位方式的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下剩下部分的基…

重塑未来体验:边缘计算与云原生的完美邂逅

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、云原生的兴起 2、边缘计算的兴起 二、边缘计算基础 …

LoadRunner12 添加事务并添加检查点

1、先要添加事务开始函数lr_start_transaction("登陆事务");,在接口上方右击点击-插入-开始事务。输入事务名称; 2、在某个接口想法 右击点击-插入-结束事务,输入事务名称,与开始事务名称要保持一致,lr_end_…

springboot自动装配(源码分析)

利用spi机制发现配置类并注册到spring容器中 以下示例使用springboot:3.2.1版本 相关注解 SpringBootApplication EnableAutoConfiguration AutoConfigurationImportSelector 使用Import导入AutoConfigurationImportSelector,随着springboot启动,会…

工业控制常用的EtherNet/IP、OPC UA协议的标签数据转发到另外的PLC寄存器地址

在工业自动化领域,越来越多的碰到标签方式通讯的设备,常用有CIP(基于EtherNet/IP) 的协议、OPCUA协议等,CIP协议主要是罗克韦尔/AB的PLC、欧姆龙NX/NJ系列的PLC等,OPCUA协议常见于工业机器人、智能焊接设备等。在不具备标签协议接…

AI绘画变现也有新思路,国风带你日进斗金!

在中国的文化传承中,古典的风韵总是能引发无尽的遐想和美感。 在现代化的今天,越来越多的人开始重新审视和欣赏那些古老的中国风,发现其中蕴含的深厚文化底蕴与无与伦比的美感。 特别是在影视、音乐、舞蹈等艺术形式中,国风元素…

【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载 本章将分享C增加的几种常见特性,主要内容为引用与内联函数 | auto关键字与for循环 | 指针空值,这些知识看似很多,实际也不少。本章篇幅长&#…

双笼转子三相感应电动机瞬态分析(7):定子绕组短路故障分析

1. 引言 2. 定子绕组短路时端电压约束条件 3. 双笼转子三相感应电动机数学模型 4. 仿真分析 5. 结论 6. 参考文献 1. 引言 定子绕组短路故障是三相感应电动机的典型故障情形之一,但其发生几率比缺相故障要低。根据电力系统的研究报告,单相短路在所有…

在仪器计量校准中,无尘车间洁净室检测有哪些方法和流程?

仪器计量校准行业内,无尘车间洁净室检测可以说是较为热门的业务,因为其预算高,且检测流程不是太繁琐,很多仪器计量校准机构也是设立相关实验室,专门处理相关仪器的检测。不过虽然许多机构想要涉足该领域,但…

ArcGIS自带的python安装第三方库

ArcGIS自带的python安装第三方库 文章目录 ArcGIS自带的python安装第三方库pip库安装安装setuptools库安装pip库 第三方库安装 在做项目时,用到了ArcGIS(非pro)中python中的arcpy库,但是又依赖其他外部库,而 Python2并不像Python3那样自带pip…

gitlab项目添加新成员

gitlab项目添加新成员 1、进入项目,找到settings----->点击Members 2、手动输入要添加成员的账号或者搜索,最后点击Add to project就可以了 choose a role permission 是为要添加的成员选择角色权限 补充: ‌Maintainer:拥…

RabbitMQ未授权访问漏洞

RabbitMQ未授权访问漏洞 RabbitMQ是目前非常热门的一款消息中间件,基于AMQP协议的,可以在发布者和使用者之间交换异步消息。消息可以是人类可读的JSON,简单字符串或可以转换为JSON字符串的值列表 1、使用以下Fofa语法对RabbitMQ产品进行搜索 2、在打开…

【机器学习】回归类算法-一元线性回归(入门)

一、概念 一元线性回归,指的是只研究一个自变量与一个因变量之间的关系。简单来说就是看如何设计出一条理想的直线(ykxb)。 二、如何确定一条理想的直线? (1)最小二乘法 通过数学模型,拟合一条…

数字化转型的实践指南:揭开TOGAF®架构开发方法ADM的核心价值

实践应用视角:引领数字化转型的必备工具 《TOGAF架构开发方法》 是为企业数字化转型提供系统化指导的权威指南。无论是企业架构师还是信息技术经理,都能从这本《TOGAF架构开发方法》中找到行之有效的方法和策略,帮助他们在数字化时代实现业务…

open_ai-maddpg_Multiagent-particle-envs环境搭建过程

一.利用Anaconda安装python3.6环境 1.安装 下载源: 利用Anaconda安装python3.6环境_anaconda python3.6-CSDN博客 安装过程: windows下载安装anaconda3.6图文教程 - 简书 (jianshu.com) Python3.6版本anacondaPyCharm环境配置,全网最详细…

Vulnhub入门篇-Kioptrix2014

1.环境配置 下载地址:https://download.vulnhub.com/kioptrix/kiop2014.tar.bz2 攻击机kali:192.168.26.128(Nat模式) 靶机配置:Nat模式 这里注意,根据官网地址说明,需要我们先将网络适配器…

【机器学习】人工神经网络优化方法及正则化技术

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 人工神经网络优化方法及正则化技术1. 引言2. 神经网络优化的基础2.1 损失函数2.…