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

免死金牌

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

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

使用boto3配置S3

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

clike 复制代码
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方法拉取到文件,用法如下:

clike 复制代码
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文件的时候了。。。

clike 复制代码
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,记录完毕,睡觉。

原创不易,希望能帮到你,求关注~

求关注公众号

相关推荐
CodeClimb3 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
夜幕龙10 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
晚夜微雨问海棠呀43 分钟前
长沙景区数据分析项目实现
开发语言·python·信息可视化
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
dundunmm1 小时前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
一道微光1 小时前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
四口鲸鱼爱吃盐2 小时前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
是娜个二叉树!2 小时前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python
互联网杂货铺2 小时前
Postman接口测试:全局变量/接口关联/加密/解密
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman