使用Python将OSS文件免费下载到本地:第四步 将ECS中文件下载到本地

在这里插入图片描述

大家好,我是水滴~~

本文将介绍了使用的知识点、以及将ECS中文件下载到本地的代码、并对该代码进行详细解析、最后给出部署方案,希望能对你有所帮助!

《Python入门核心技术》专栏总目录・点这里

系列文章

  • 使用Python将OSS文件免费下载到本地:项目分析和准备工作
  • 使用Python将OSS文件免费下载到本地:第一步 列举OSS文件
  • 使用Python将OSS文件免费下载到本地:第二步 将OSS文件下载到ECS中
  • 使用Python将OSS文件免费下载到本地:第三步 提供一个从ECS中下载和删除文件的接口
  • 使用Python将OSS文件免费下载到本地:第四步 将ECS中文件下载到本地

文章目录

  • 系列文章
  • 1. 本文知识点
    • 1.1 datetime 模块
    • 1.2 base64 模块
    • 1.3 os 模块
    • 1.4 psutil 库
    • 1.5 MySQL 连接器
    • 1.6 PyInstaller
    • 1.7 requests 库
  • 2. 代码与解析
    • 2.1 安装依赖
    • 2.2 完整代码
    • 2.3 代码解析
  • 3. 部署
    • 3.1 列出依赖项
    • 3.2 安装依赖项
    • 3.3 运行 Python 文件
    • 3.4 其他部署方式


在上一篇文章中,我们提供了一个从ECS服务器中下载和删除文件的接口。这篇文章是我们继续讲解第四步:将ECS中文件下载到本地。

1. 本文知识点

1.1 datetime 模块

datetime模块是Python标准库中用于处理日期和时间的模块。它提供了多个类来处理日期、时间、时间间隔等,并且支持日期时间的运算和格式化。

更多介绍参见:《日期和时间(time、datetime、calendar 模块》

1.2 base64 模块

base64 是 Python 标准库中的一个模块,提供了对 Base64 编码和解码的功能。Base64 是一种将二进制数据转换为 ASCII 字符串的编码方式,常用于在文本协议中传输二进制数据或存储二进制数据到文本文件中。

更多介绍参见:《Base64 编码和解码(base64 模块)》

1.3 os 模块

os 是 Python 标准库中的一个模块,提供了与操作系统交互的功能。通过 os 模块,您可以执行各种与文件系统、进程管理、环境变量等相关的操作。

更多介绍参见:《os 模块》

1.4 psutil 库

psutil是一个跨平台的Python库,它提供了对系统进程和系统资源利用情况的访问接口。使用psutil,您可以轻松地获取有关CPU、内存、磁盘、网络、传感器和系统进程等方面的信息。

在使用前需要先安装该库,下面是安装命令:

pip install psutil

1.5 MySQL 连接器

mysql-connector-python 是 MySQL 官方提供的 Python 连接器,用于在 Python 应用程序中与 MySQL 数据库进行交互。它是一个纯 Python 实现的驱动程序,可以通过它执行 SQL 查询、插入、更新、删除等操作。

在使用前需要先安装该库,下面是安装命令:

pip install mysql-connector-python

1.6 PyInstaller

PyInstaller 是一个用于将 Python 应用程序打包成独立可执行文件的工具。它可以将 Python 代码及其依赖项(包括解释器)打包成单个可执行文件,这样用户可以在没有安装 Python 解释器或依赖项的情况下运行你的应用程序。你可以使用 PyInstaller 来创建跨平台的可执行文件,支持 Windows、macOS 和 Linux 等操作系统。

在使用前需要先安装该库,下面是安装命令:

pip install pyinstaller

1.7 requests 库

requests是一个流行的Python库,用于发送HTTP请求和处理响应。它提供了简单且直观的API,使得与Web服务进行交互变得容易。

在使用前需要先安装该库,下面是安装命令:

pip install requests

2. 代码与解析

2.1 安装依赖

下面代码使用了 requestspsutilmysql-connector-python 三个第三方库,所以要提前安装它们,下面是安装指令:

pip install psutil
pip install requests
pip install mysql-connector-python

2.2 完整代码

在项目中创建一个第四步:将ECS中文件下载到本地.py Python文件,下面是完整代码:

import base64
import os
import time
from datetime import datetimeimport mysql.connector
import psutil
import requests# # 文件本地存储路径
file_path = "E:/oss_download/file_list/"
# 请求地址(第三步中的服务外网地址)
request_path = 'http://*.*.*.*:8080/'# 检测磁盘空间是否充裕
def check_disk_space():# 获取当前目录的路径current_directory = os.getcwd()# 获取当前目录的磁盘空间信息disk_usage = psutil.disk_usage(current_directory)# 将磁盘空间转换为GBavailable_space_gb = disk_usage.free / (1024 ** 3)print("当前目录的可用空间:" + str(available_space_gb) + "GB")if available_space_gb > 10:return Trueelse:return False# 创建文件的目录
def makedirs(filename):# 获取文件的目录directory = os.path.dirname(filename)# 检查目录是否存在,如果不存在则创建目录if not os.path.exists(directory):os.makedirs(directory)if __name__ == '__main__':# 建立与数据库的连接cnx = mysql.connector.connect(user='root', password='root', host='localhost', database='oss', port=3306)# 创建一个游标对象cursor = cnx.cursor()while True:try:# 查询前10个待下载到本地的数据,执行查询cursor.execute('select id, key from oss_file where status = 2 order by last_modified limit 10')# 获取查询结果,结果为元组类型results = cursor.fetchall()# 查询结果为空,跳出本次循环if len(results) == 0:print("-------全部处理完了吗?")# 休眠10分钟time.sleep(600)continue# 遍历查询结果,逐个下载for row in results:# 打印该文件data = {'id': row[0],'key': row[1]}key = data['key']print(key)# 远程下载到本地key_base64 = base64.b64encode(key.encode()).decode()request_url = request_path + 'download/' + key_base64  # 文件下载URLfile_name = file_path + key  # 下载后保存的文件名makedirs(file_name)# 发送GET请求并获取响应response = requests.get(request_url)# 检查响应状态码if response.status_code == 200:# 打开文件并将响应内容写入文件with open(file_name, 'wb') as file:file.write(response.content)print(key + '\t文件下载完成')# 修改数据状态data['update_time'] = datetime.now()cursor.execute('update oss_file set status = 3, update_time = %(update_time)s where id = %(id)s',data)# 提交更改到数据库cnx.commit()# 远程删除文件request_url = request_path + 'delete/' + key_base64  # 文件删除URL# 发送GET请求并获取响应response = requests.get(request_url)if response.status_code == 200:msg = response.textif msg == 'ok':print(key + '\t文件删除完成')# 修改数据状态data['update_time'] = datetime.now()cursor.execute('update oss_file set status = 4, update_time = %(update_time)s where id = %(id)s', data)# 提交更改到数据库cnx.commit()else:print(key + '\t文件删除失败error')else:print(key + '\t文件删除失败')else:print(key + '\t文件下载失败')# 下载一轮后,检测一下磁盘空间while True:if check_disk_space():breakelse:# 休眠10分钟time.sleep(600)except Exception as e:print(str(e))# 休眠1秒time.sleep(1)continue

2.3 代码解析

  • check_disk_space方法用于检测磁盘剩余空间是否充裕,该方法会输出磁盘大小。这里借助 psutil 三方加来获取磁盘信息。

  • makedirs 方法用于检测本地计算机上是否存在所需目录,如果不存在,则创建目录。

  • main主方法中,首先创建了一个 MySQL 的连接,后面修改状态时会用到。

  • 接着创建一个死循环,用于不断的从ECS上下载/删除文件。

  • 循环中,首先从数据库中查询前10个待处理的文件列表(status为2,并按last_modified 排序),表示先处理最旧的数据。

  • 遍历这个文件列表,逐个从ECS服务器中下载到本地计算机中。调用第三步中的download/接口进行下载。下载完成后将该记录的status改为3。

  • 然后再调用第三步中的delete/接口进行删除。请求返回ok后,将该记录的status改为4。

  • 这样处理一轮文件后,检测一下磁盘空间是否充裕,如果充裕就继续处理下一轮,如果不充裕,则休眠10分钟,直到充裕后再执行下一轮。

  • 最后,关闭数据库连接。

3. 部署

3.1 列出依赖项

requirements.txt是一个常用的文本文件,用于列出项目所需的所有依赖项及其版本信息。它通常用于 Python 项目,但也可以在其他项目中使用。

在项目中执行下面命令,可以列出依赖项:

pip freeze > requirements.txt

这将输出当前环境中所有安装的包及其版本信息,并将其写入requirements.txt文件中。

3.2 安装依赖项

在 Linux 服务器的项目根目录下,可以运行以下命令来安装requirements.txt中列出的所有依赖项:

pip install -r requirements.txt

这将安装所列出的所有依赖项及其指定的版本。

3.3 运行 Python 文件

第四步:将ECS中文件下载到本地.py Python文件拷贝到 Linux 服务器项目根目录下,执行下面命令即可运行该 Python 文件:

python 第四步:将ECS中文件下载到本地.py

如果想要后台运行,并且将print输出到指定的日志文件中,可以使用以下命令:

nohup python 第四步:将ECS中文件下载到本地.py > output.log 2>&1 &

这个命令执行以下操作:

  • nohup命令用于在后台运行进程,即使终端关闭后也能继续运行。

  • 第二步:将OSS文件下载到ECS中.py是你要运行的Python脚本。

  • > output.log将标准输出重定向到名为output.log的日志文件中。

  • 2>&1将标准错误也重定向到标准输出,这样错误信息也会被写入到output.log中。

  • 最后的&符号用于将进程放到后台运行。

这样,你的Python项目就会在后台运行,并将print输出写入到指定的日志文件中。

3.4 其他部署方式

如果你想部署在Windows服务器下,一个简单的方式就是通过 PyInstaller 来打包部署。它可以将Python代码及其依赖项(包括解释器)打包成单个可执行文件,这样即使服务器没有安装Python环境也可以运行你的应用程序。

下面命令可以将上面的Python脚本打包成一个exe的可执行文件:

pyinstaller -F 第四步:将ECS中文件下载到本地.py

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

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

相关文章

使用Open3D实现3D激光雷达可视化:以自动驾驶的2DKITTI深度框架为例(上篇)

原创 | 文 BFT机器人 3DLiDAR传感器(或)三维光探测和测距是一种先进的发光仪器,能够像我们人类一样在三维空间中感知现实世界。这项技术特别彻底改变了地球观测、环境监测、侦察和现在的自动驾驶领域,它提供准确和详细数据的能力…

Asp.Net Core 项目中常见中间件调用顺序

常用的 AspNetCore 项目中间件有这些,调用顺序如下图所示: 最后的 Endpoint 就是最终生成响应的中间件。 Configure调用如下: public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseD…

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘,具有超过 100 种服务和多语言翻译的集成。 快速:网站在构建时以静态方式生成,加载时间飞快。安全:所有对后…

基于阿里云平台帮助出海企业应对DDoS攻击

在出海浪潮下,越来越多企业选择出海。但海外市场也并非一片红利。由于海外千差万别的法律政策、摸不清的网络脉络。在业务快速扩展的同时,也势必会迎来“网络恶势力”DDoS攻击。海外更是DDoS攻击的重灾区,根据外部报道,白俄国安委…

VScode版本太低导致安装插件时报错:Unable to install ‘ms-vscoderemote-server‘ extension

VS code安装插件时报错:Unable to install ‘ms-vscoderemote-server’ extension because it is not compatible with the current version of VS Code (version 1.421) 是因为VS code 版本太低的原因,可以更新Vscode即可:点击help&#x…

C语言——内存函数的使用与模拟实现

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…

RPC(5):AJAX跨域请求处理

接上一篇RPC&#xff08;4&#xff09;&#xff1a;HttpClient实现RPC之POST请求进行修改。 1 修改客户端项目 1.1 修改maven文件 修改后配置文件如下&#xff1a; <dependencyManagement><dependencies><dependency><groupId>org.springframework.b…

数据分析师的职业规划与参考资料

数据分析师如何规划 参考&#xff1a;超详细的数据分析职业规划 一个产品的出现可以从业务和技术两个方向分析&#xff0c;业务需求技术支持产品的出现。 如果把职业也当成一个产品&#xff0c;也有类似的分析&#xff0c; 其中业务也就是领域&#xff0c;即这个业务领域的特点…

mac电脑m1 arm架构安装虚拟机教程

1、准备一台虚拟机&#xff0c;安装CentOS7 常用的虚拟化软件有两种&#xff1a; VirtualBoxVMware 这里我们使用VirtualBox来安装虚拟机&#xff0c;下载地址&#xff1a;Downloads – Oracle VM VirtualBox 001 点击安装 002 报错&#xff1a;he installer has detected an…

【Python】基于ORM的SqlAlchemy操纵数据库代码实现

说明 ORM&#xff0c;全称Object-Relational Mapping&#xff0c;即对象-关系映射&#xff0c;是一种程序设计技术&#xff0c;用于在面向对象编程语言和关系数据库之间建立对应关系。它的主要目的是让开发者能够使用面向对象的方式操作数据库&#xff0c;而不必过多地关注数据…

【 USRP安装教程】MATLAB 2023B

步骤 matlabdocusrp驱动包 doc 安装包内容列表 双击“R2023b_Doc_Windows.iso” 打开cmd 查看盘符 切换盘符 因为是F盘&#xff0c;所以cmd输入&#xff1a;“F:” F:进入可安装界面 cd F:\bin\win64安装离线文档库 .\mpm install-doc --matlabroot"C:\MATLAB\R202…

idea 如何使用 JaCoCo 跑覆盖率

背景介绍 什么代码覆盖&#xff1f; 代码覆盖(Code coverage)是软件测试中的一种度量&#xff0c;描述程序中源代码被测试的比例和程度&#xff0c;所得比例称为代码覆盖率。简单来理解&#xff0c;就是单元测试中代码执行量与代码总量之间的比率。 Java常用的单元测试覆盖率…

kafka offset sasl加密连接

kafka-tool&#xff08;offset&#xff09; 进行SCRAM连接&#xff0c;直接上图 填写jaas的认证&#xff08;账密 引用包&#xff09;

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库&#xff0c;也是最常用的Python GUI库之一&#xff0c;提供了丰富的组件和功能&#xff0c;包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等&#xff0c;方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…

使用Gitee中的CI/CD来完成代码的自动部署与发布(使用内网穿透把本地电脑当作服务器使用)

&#x1f4da;目录 &#x1f4da;简介:⚙️ 所需工具&#xff1a;&#x1f4a8;内网穿透配置&#x1f4ad;工具介绍✨命令安装&#x1f38a;配置Cpolar&#x1f573;️关闭防火墙&#x1f95b;防火墙端口放行规则&#xff08;关闭防火墙可以忽略&#xff09;&#x1f36c;小章总…

Windows系统下的可用RADIUS软件-[资源]

RADIUS协议相关原理介绍&#xff0c;可参考博客RADIUS协议原理介绍报文分析配置指导-RFC2865/RFC2866。 本文用于提供和介绍Window系统下几种可用的RADIUS软件。主要涉及软件有radius_ping&#xff08;绿色免安装版&#xff09;和WinRadius&#xff08;绿色免安装版&#xff09…

使用极狐gitlab初始化导入本地项目

本地有项目的情况需要同步到极狐gitlab上 第一步&#xff1a; 在gitlab上新创建一个空项目 ⚠️⚠️⚠️这里需要注意红色圈住的地方一定不要选择&#xff0c;因为选择了这个后续会有不必要的麻烦 第二步 在本地项目中删除原来的.git文件(这一步如果是新项目可以忽略&#…

mysql部署 --(docker)

先查找MySQL 镜像 Docker search mysql &#xff1b; 拉取mysql镜像&#xff0c;默认拉取最新的&#xff1b; 创建mysql容器&#xff0c;-p 代表端口映射&#xff0c;格式为 宿主机端口&#xff1a;容器运行端口 -e 代表添加环境变量&#xff0c;MYSQL_ROOT_PASSWORD是root用户…

通用的java中部分方式实现List<自定义对象>转为List<Map>

自定义类 /*** date 2023/12/19 11:20*/ public class Person {private String name;private String sex;public Person() {}public Person(String name, String sex) {this.name name;this.sex sex;}public String getName() {return name;}public String getSex() {return…

java读取含有合并单元格的Excel

java读取含有合并单元格的Excel Excel如下&#xff1a; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.*;import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.…