python上传以及下载AWS S3上的文件

news2024/11/19 6:13:50

免死金牌

由于本人平常是做NodeJS开发的,本次做的任务含有 Scheduled Job ,所以选择了使用Python作为这次开发的语言,毕竟跑脚本还是这玩意适合。

其中有一个任务是要从S3上拉下一些文件来处理,处理完成后再push 上去的需求,这时候就必须要有对S3上文件处理的熟悉度了。
由于对Python的数据类型不熟悉,所以也是查询了不少文档也才完成了这次任务,因此觉得记录下来的价值,​所以就诞生了这篇文章,也希望别人能用到。
对于S3的服务描述,本质就是一个文件存储商,所以当作一个提供了API的服务商即可。
在本文中,必定会有很多Python新手出现的错误,所以本人在此希望各位指出错误。

使用boto3配置S3

按照开发的思路,出来混的,参数配置肯定不能直接写死的,所以读取S3的环境变量也变得特别重要了,必须得选择写一个文件来放置

import os
import boto3
​
s3_client = boto3.client('s3', 
    aws_access_key_id=os.getenv('ACCESS_KEY'), 
    aws_secret_access_key=os.getenv('SECRET_KEY'), 
    region_name='ap-southeast-1'
)

这一块没啥好说的,就是配置了下S3的信息从os中读取而已。
比较需要注意的是,我们必须要用到 boto3 来连接 AWS S3 的服务,这是因为 boto3 是AWS专门用来给我们链接到他们的服务的一个python库
Boto3 是 Amazon Web Services (AWS) 软件开发工具包 (SDK) Python,它允许 Python 开发人员编写使用 Amazon S3 和 Amazon EC2 等服务。

下载/上传操作

到了这一步,我们已经配置好了链接到S3了,接下来需要的就是对上面的文件进行操作了,比如使用 get_object方法拉取到文件,用法如下:

try:
  print(id)
  response = s3_client.get_object(
    Bucket=os.getenv('BUCKET'),
     Key=id
  )
  report = pk.loads(response['Body'].read())
except Exception as error:
  print(error)
  abort(400, "Not Ready")

上述代码只是一个简单的try-catch捕获出现的问题而已,并没有什么很大的难度,所以不讲解。
当我们修改完我们的数据后,任需要将其放到S3上去,此时,必须要用到 put_object 方法去上传文件,而需要三个参数,分别是我们的Bucket的名字,我们的文件的名字,以及文件的实体,而这儿使用的是pickle模块的序列化,无他,我得节省些数据空间,而后期也会考虑是否直接生成一个xlsx文件,当哪天我出了一个博客是关于openxyl的时候,就是我修改为​xlsx文件的时候了。。。

try:
  s3_client.put_object(
    Bucket = os.getenv('BUCKET'),
    Key = s3_key,
    Body = pk.dumps(obj),
  )
except Exception as error:
  flash('Submission Failed')
  print(error)


​ok,记录完毕,睡觉。

在这里插入图片描述
原创不易,希望能帮到你,求关注~

求关注公众号

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

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

相关文章

深入浅出 -- 系统架构之负载均衡Nginx动静分离

一、Nginx动静分离 动静分离应该是听的次数较多的性能优化方案,那先思考一个问题:为什么需要做动静分离呢?它带来的好处是什么? 其实这个问题也并不难回答,当你搞懂了网站的本质后,自然就理解了动静分离的重…

【学习分享】小白写算法之选择排序篇

【学习分享】小白写算法之选择排序篇 前言一、什么是选择排序算法二、选择排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 简单排序有三种,冒泡排序,插入排序和选择排序。这三种排序的算法算是入门级别的,打好…

torchvision中的数据集使用

torchvision中的数据集使用 使用和下载CIFAR10数据集 输出测试集中的第一个元素(输出img信息和target) 查看分类classes 打断点–>右键Debug–>找到classes 代码 import torchvisiontrain_set torchvision.datasets.CIFAR10(root"./data…

显示学习1(基于树莓派Pico) -- 基础

先上图为敬。 驱动的是0.96寸的OLED,SSD1315。使用的I2C接口驱动。 有一说一树莓派Pico用来学习底层真的太好了,没有之一。首先是价格便宜,10块钱包邮还要什么自行车。然后底层封装很完备,接近闭源。最后是用的python&#xff0c…

4.2.k8s的pod-标签管理、镜像拉取策略、容器重启策略、资源限制、优雅终止

一、标签管理 1.标签在k8s中极其重要,大多数资源的相互关联就需要使用标签;也就是说,资源的相互关联大多数时候,是使用标签进行关联的; 2.其他作用,在k8s集群中,node节点的一些操作比如污点及污…

Python向带有SSL/TSL认证服务器发送网络请求小实践(附并发http请求实现asyncio+aiohttp)

1. 写在前面 最近工作中遇到这样的一个场景:给客户发送文件的时候,为保证整个过程中,文件不会被篡改,需要在发送文件之间, 对发送的文件进行签名, 而整个签名系统是另外一个团队做的, 提供了一…

c# wpf XmlDataProvider 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window12"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

【一】学习TDengine-总结新技术学习的思考

学习TDengine-总结新技术学习的思考 概要 因业务场景需要我们开始接触时序数据库&#xff0c;于是开始根据以往的学习经验着手熟悉这一项新技术&#xff0c;学习也是一种技能&#xff0c;成功的人越容易成功&#xff0c;因为他们掌握了一套成功的方法&#xff0c;这里提到学习经…

Docker容器与虚拟化技术:OpenEuler 部署 Prometheus 与 Grafana

目录 一、实验 1.环境 2.OpenEuler 部署 Prometheus 3.OpenEuler 部署 Grafana 4.使用cpolar内网穿透 二、问题 1.拉取镜像失败 2.如何导入Grafana监控模板&#xff08;ES&#xff09; 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注…

机器学习(理论第一课)

一、理解人工智能、机器学习、深度学习、强化学习&#xff1f; 人工智能、机器学习和深度学习之间存在递进关系&#xff0c;它们的覆盖范围逐层递减。 **人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;**是最宽泛的概念&#xff0c;旨在研究、开发用于…

第十四届蓝桥杯物联网试题(省赛)

这个题还是有点难度的&#xff0c;刚好能做完&#xff0c;还遇到一个意料之外的BUG,这次算是失败了&#xff0c;因为那个BUG让我以为是板子坏了其实是我LORA没初始化 储存信息用结构体存储 第一次写结构体能一次实验成功也挺开心的 值得赞扬的是我这样排版的好处是所有变量都在…

基于Whisper的实时语音识别(1): 流式显示视频帧和音频帧

Whistream &#xff08;微流&#xff09;是基于openai-whisper 大语音模型下的流式语音识别工具 本期主要介绍实时显示工具Whishow&#xff0c;可以实时逐帧显示视频流&#xff08;RTSP/RTMP&#xff09;和离线文件&#xff08;mp4,avi等&#xff09; 下载地址&#xff1a;ht…

复现chatgpt_ros,需要openapi key

&#xff11;&#xff0e; 前置工作&#xff1a; 现在&#xff55;buntu系统是20.04ros1&#xff0c;现在用docker新建并安装ros2&#xff1a; 最简单的&#xff0c;用大佬的一键安装&#xff1a; wget http://fishros.com/install -O fishros && . fishros 其次自己装…

深入浅出 -- 系统架构之负载均衡Nginx资源压缩

一、Nginx资源压缩 建立在动静分离的基础之上&#xff0c;如果一个静态资源的Size越小&#xff0c;那么自然传输速度会更快&#xff0c;同时也会更节省带宽&#xff0c;因此我们在部署项目时&#xff0c;也可以通过Nginx对于静态资源实现压缩传输&#xff0c;一方面可以节省带宽…

【微信小程序】【小程序样式加载不出来】

微信小程序配置sass 第一步&#xff1a;找配置文件 在项目中找到 project.config.json文件&#xff0c;在setting属性中添加 useCompilerPlugins属性&#xff0c;值为sass即可&#xff0c;若是 less,将数组里面的值改为less即可 "useCompilerPlugins": ["sas…

MySQL复制拓扑1

文章目录 主要内容一.安装MySQL服务器1.MySQL 安装程序和其它文件保存在下发的 mysql8-files.iso 镜像文件中&#xff0c;可以使用虚拟光驱来提取到 Linux 文件系统。代码如下&#xff08;示例&#xff09;: 2.将 MySQL8.0 程序解压到 /opt 目录&#xff0c;再创建到 MySQL 默认…

08 Python进阶:XML 解析

什么是 XML&#xff1f; XML&#xff08;可扩展标记语言&#xff0c;Extensible Markup Language&#xff09;是一种用于表示和传输数据的标记语言。它被设计用来以一种结构化的形式描述文档的内容&#xff0c;并且具有良好的跨平台和跨语言的特性。XML使用标签来定义数据的结构…

PyTorch之计算模型推理时间

一、参考资料 如何测试模型的推理速度 Pytorch 测试模型的推理速度 二、计算PyTorch模型推理时间 1. 计算CPU推理时间 import torch import torchvision import time import tqdm from torchsummary import summarydef calcCPUTime():model torchvision.models.resnet18()…

深入浅出 -- 系统架构之分布式多形态的存储型集群

一、多形态的存储型集群 在上阶段&#xff0c;我们简单聊了下集群的基本知识&#xff0c;以及快速过了一下逻辑处理型集群的内容&#xff0c;下面重点来看看存储型集群&#xff0c;毕竟这块才是重头戏&#xff0c;集群的形态在其中有着多种多样的变化。 逻辑处理型的应用&…

线程池详解并使用Go语言实现 Pool

写在前面 在线程池中存在几个概念&#xff1a;核心线程数、最大线程数、任务队列。 核心线程数指的是线程池的基本大小&#xff1b;也就是指worker的数量最大线程数指的是&#xff0c;同一时刻线程池中线程的数量最大不能超过该值&#xff1b;实际上就是指task任务的数量。任务…