首页 > 编程语言 >批量异步上传aws图片脚本(python)

批量异步上传aws图片脚本(python)

时间:2024-06-16 11:12:40浏览次数:27  
标签:files 异步 python image aws upload s3 file

背景

工作中需要上传一些测试图片,于是网上找找资料(官方说明),前置步骤如下。

  1. python需要3.8以上,安装最新的boto3库:
    pip install boto3
  2. 有一个S3权限的aws账户,得到访问密钥ACCESS_KEY与SECRET_KEY,以及上传图片的存储桶位置
  3. 安装异步编程asyncio,aiohttp库,方便本地异步上传图片

代码实现

 1 # -*- coding: utf-8 -*-
 2 """
 3 # @Author : qgc
 4 # @Time : 2024/3/13 14:28
 5 # @File : upload_to_aws.py
 6 # Description : 文件说明
 7 """
 8 import os
 9 import boto3
10 import asyncio
11 import aiohttp
12 
13 aws_access_key_id = 'xxxxxx'
14 aws_secret_access_key = 'xxxxxxx'
15 bucket_name = 'deme-normal'   # 存储桶的具体路由,路由不存在会上传失败,但不会报错
16 
17 async def upload_to_aws(local_file, s3_file):
18     s3 = boto3.client('s3', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
19     try:
20         s3.upload_file(local_file, bucket_name, s3_file)
21         print(f"{local_file} upload to s3://{bucket_name}/{s3_file} successed")
22         return True
23     except FileNotFoundError:
24         print('本地文件未找到')
25         return False
26 
27 async def upload_task(url, session, semaphore):
28     try:
29         if url:
30             local_filename = url
31             s3_path = 'qgctest/' + os.path.basename(url)
32             await upload_to_aws(local_filename, s3_path)
33     except Exception as e:
34         print(f'处理{url}:{e}')
35 
36 def get_image_files(directory):
37     image_files = []
38     if directory:
39         for file in os.listdir(directory):
40             if file.endswith('.jpg') or file.endswith('.jpeg') or file.endswith('.png') or file.endswith('.gif'):
41                 image_files.append(os.path.join(directory, file))
42     return image_files
43 
44 async def main(image_files):
45     semaphore = asyncio.Semaphore(10)
46     connector = aiohttp.TCPConnector(limit=10)
47     async with aiohttp.ClientSession(connector=connector) as session:
48         tasks = [upload_task(url, session, semaphore) for url in image_files]
49         await asyncio.gather(*tasks)
50 
51 
52 if __name__ == '__main__':
53     directory = f'E:\图片\images2'  # 本地图片路径
54     image_files = get_image_files(directory)
55     # image_files = ['E:\\图片\\images2\\0.jpg']
56     print(f'共找到{len(image_files)}个图片')
57     asyncio.get_event_loop().run_until_complete(main(image_files))

 

标签:files,异步,python,image,aws,upload,s3,file
From: https://www.cnblogs.com/qgc1995/p/18077183

相关文章

  • python学习 - 对目录操作和对文件操作的 实例代码
    #!/usr/bin/python#-*-coding:UTF-8-*-importosimportos,shutilclassOperatingFile:defcreatFile(self,path):f=file(path,"w+")f.close()defreadFile(self,path):#方法一f=open("E:/aa......
  • python学习 - for循环 各种使用技巧 案例代码
    #!/usr/bin/python#-*-coding:UTF-8-*-forletterin'Python':#第一个实例print'当前字母:',letterfruits=['banana','apple','mango']forfruitinfruits:#第二个实例print'当前水果:',fr......
  • python学习 - 对list列表的操作 实例代码
    #!/usr/bin/evnpython#-*-encoding:utf-8-*-list=[1,4,3,3,"A","B","c","A"]#增加list.append("AA")#像末尾增加一个新元素list.insert(1,"B")#像指定索引位置插入元素list.extend(["D","DD"])#新......
  • python学习 - 读取xls文件的操作案例代码
    #!/usr/bin/evnpython#-*-encoding:utf-8-*-importxlrdimportxlwtimportxlutils.copyclassExcels:defcreateExcel(self):workbook=xlwt.Workbook()sheet=workbook.add_sheet(u"sheet页名称",cell_overwrite_ok=True)......
  • python学习 - 操作redis数据库常用指令 案例
    #-*-coding:UTF-8-*-importredisimporttimeclassTestRedis:def__init__(self):self.dbconn=NonedefopenRedis(self):#连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。......
  • 怎么把Python脚本打包成可执行程序exe文件?
    需求分析最近根据用户提的需求用python做了一个小工具,但是在给客户使用的时候不能直接发送python文件,毕竟让客户去安装python环境,那就离了大谱了。所以这时候就需要把多个py文件带着运行环境打包成EXE可执行文件。技术实现这里以window为例,Mac是同样的道理。一、检测脚......
  • python入门级经典交互式小程序
    今天学习做一个简单的交互式小程序知识点:1.对空列表进行添加元素,并分别打印每次添加的元素2.给while设置参数法进行循环3.for循环结合range()进行循环代码如下:klist=[]name=input("请输入你喜欢的明星:")while(name):  klist.append(name)  name=input......
  • 游戏缓存与异步持久化的完美邂逅
    1、问题提出游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢?2、应用程序缓存缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。游戏服务器对于玩家数据的读......
  • 2024华为OD机试真题-堆内存申请-(C++/Python)-C卷D卷-100分
    2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)题目描述有一个总空间为100字节的堆,现要从中新申请一块内存,内存分配原则为:优先紧接着前一块已使用内存,分配空间足够且最接近申请大小的空闲内存。输入描述第1行是1个整数,表示期望申请的内存字节数第2到第N行是用空格......
  • 2024华为OD机试真题-围棋的气-(C++/Python)-C卷D卷-100分
     2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19x19=361个交点,对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。“气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相......