使用Python将OSS文件免费下载到本地:第一步 列举OSS文件

news2024/11/17 17:53:01

在这里插入图片描述

大家好,我是水滴~~

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

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

文章目录

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


在上一篇文章中,我们对本项目实战做了分析,以及一些准备工作。本文我们讲解第一步:列举OSS文件,并写入MySQL数据库,为后面的下载提供完整的文件列表。

1. 本文知识点

1.1 datetime 模块

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

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

1.2 OSS Python SDK

阿里云提供了 Python SDK 用于操作对象存储服务(OSS),您可以使用该 SDK 在 Python 应用程序中进行 OSS 的上传、下载、删除等操作。

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

pip install oss2

1.3 MySQL 连接器

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

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

pip install mysql-connector-python

1.4 PyInstaller

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

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

pip install pyinstaller

2. 代码与解析

2.1 安装依赖

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

pip install oss2
pip install mysql-connector-python

2.2 完整代码

首选创建一个项目,名称你随意,然后在项目中创建一个第一步:列举OSS文件.py Python文件,下面是完整代码:

from datetime import datetime

import mysql.connector
import oss2


# 创建并获取 OSS 存储桶对象
def get_bucket():
    # OSS认证,需要 access_key_id 和 access_key_secret
    auth = oss2.Auth('填写你的access_key_id', '填写你的access_key_secret')
    # OSS 端点地址(如果该程序部署到 ECS 上,这里使用内网地址可以节约一些流量)
    endpoint = '填写你的端点,例如:https://oss-cn-qingdao.aliyuncs.com'
    # 存储桶名称
    bucket_name = '填写你的bucket_name'
    # 创建一个存储桶对象
    return oss2.Bucket(auth, endpoint, bucket_name)


# 指定时间的时间戳,这里是:2023年1月1日
timestamp = datetime(2023, 1, 1, 0, 0, 0).timestamp()


# 校验OSS文件
def check_oss_file(oss_key, oss_last_modified):
    # 这里只处理2023年1月1日之前的文件
    if oss_last_modified >= timestamp:
        return False
    # 只处理文件,不处理目录
    if oss_key.endswith('/'):
        return False
    return True


if __name__ == '__main__':
    # 建立与数据库的连接(下面地址根据你的实际情况填写)
    cnx = mysql.connector.connect(user='root', password='root', host='localhost', database='oss', port=3306)
    # 创建一个游标对象
    cursor = cnx.cursor()

    # 获取 OSS 存储桶对象
    bucket = get_bucket()
    # 文件前缀(只列举匹配该前缀的文件)
    prefix = 'app/'

    try:
        # 列举Bucket下的指定前权的文件。
        for obj in oss2.ObjectIterator(bucket, prefix):
            key = obj.key  # 文件名
            last_modified = obj.last_modified  # 最后修改时间
            last_modified_datetime = datetime.fromtimestamp(last_modified)
            size = obj.size  # 文件大小

            print(str(last_modified_datetime) + '\t' + str(key))

            # 校验OSS文件
            if not check_oss_file(key, last_modified):
                print('不处理')
                continue

            print('插入')
            # 定义要插入的数据,status为0表示未处理
            data = {
                'prefix': prefix,
                'key': key,
                'last_modified': last_modified_datetime,
                'size': size,
                'status': 0,
                'create_time': datetime.now()
            }
            # 编写插入记录的SQL查询
            sql = """
                INSERT INTO oss_file
                (`prefix`, `key`, `last_modified`, `size`, `status`, `create_time`)
                VALUES (%(prefix)s, %(key)s, %(last_modified)s, %(size)s, %(status)s, %(create_time)s)
            """
            try:
                # 执行查询,将数据插入表中
                cursor.execute(sql, data)
            except Exception as e:
                if str(e).index('i_key') > 0:
                    print("重复")
                continue
            # 提交更改到数据库
            cnx.commit()
            print("成功")
    except Exception as e:
        print(e)
        # 关闭游标和数据库连接
        cursor.close()
        cnx.close()

2.3 代码解析

  • get_bucket方法用于创建并获取OSS的存储桶对象,我这里使用简单的Auth凭证,官方推荐使用安全的ProviderAuth凭证,参见:Python配置访问凭证。

  • check_oss_file方法用于验证当前文件的时间是否满足要求,即:只下载指定日期之前的文件。

  • main主方法中,首先创建了一个 MySQL 的连接,用于将列举出的文件名写入库中;接着获取OSS的存储桶对象。

  • oss2.ObjectIterator方法用于列举文件,参数传入OSS存储桶对象和列举的文件前缀,表示只列举此前缀下的文件,其它列举方法可以参见:Python列举文件。该方法默认每次获取100个文件,不断的迭代执行,直到将此前缀下所有文件列举出来为止。

  • 通过for循环遍历可以得到oss2.models.SimplifiedObjectInfo对象,该对象的属性有:

    • key 文件名

    • last_modified 文件的最后修改时间

    • etag HTTP ETag

    • type 文件类型

    • size 文件大小,单位字节

    • storage_class 文件的存储类别,是一个字符串

    • owner owner信息, 类型为: oss2.models.Owner

    • restore_info Object的解冻状态

  • 对于满足条件的文件,将其属性信息存入data 对象中,并插入到数据库,其中status赋值为0,表示还未处理。

  • 插入时如果重复,会触犯i_key唯一索引,这样继续执行下一条即可。

  • 列举完文件后,关闭数据库连接。

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 文件

第一步:列举OSS文件.py Python文件拷贝到 Linux 服务器项目根目录下,执行下面命令即可运行该 Python 文件:

python 第一步:列举OSS文件.py

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

nohup python 第一步:列举OSS文件.py > output.log 2>&1 &

这个命令执行以下操作:

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

  • 第一步:列举OSS文件.py是你要运行的Python脚本。

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

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

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

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

3.4 其他部署方式

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

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

pyinstaller -F 第一步:列举OSS文件.py

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

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

相关文章

PyQt5连接mysql失败解决

一:背景 最近研究一个项目,里面用的Pyqt5编写的桌面应用,跑了下源码发现连接数据库那块出来问题,最终调试发现里面用的QtSql去连接mysql提示驱动找不到。 具体报错信息如下: Could not parse stylesheet of object …

使用VBA字典,进行数据分类汇总

使用VBA字典,进行数据分类汇总 VBA的字典共有两列,第一列是key,不允许有重复的元素;第二列是item,也就是key对应的值,item的值是可以有重复的值的。 字典的主要操作有读和写。 写操作 d(key)item&#…

直流电、交流电和发电机、接地、变压器

直流电 此节内容主要摘录自:图文详解直流电与直流电路基本知识 直流电是指电流方向不随时间作周期性变化,由正极流向负极,但电流的大小可能会变化的电流。直流电可以分为稳定(恒定)直流和脉动直流两种,如下…

迪文屏开发保姆级教程—背景图ICL文件生成

本篇文章主要介绍了在DGBUS平台上生成页面背景图片库,32xx.ICL文件的方法。 文章目录 一、前言 开发环境 二、具体步骤 1.打开软件 2.选定参数 3.导入背景图片 4.然后点击生成,​编辑 三、容易踩得坑 一、前言 本篇文章主要介绍了在DGBUS平台上生…

SQLturning:定位连续值范围起点和终点

在上一篇blog说到,如何去优化查询连续值范围,没看过的朋友,上篇blog链接[在此]。(https://blog.csdn.net/weixin_42575078/article/details/135067645?spm1001.2014.3001.5501) 那么今天来说说怎么将连续的数据合并,然后返回合并…

红米k40刷机澎湃OS

红米k40线刷澎湃OS,MIUI→HyperOS 1.0.23.12.9 博主自己也是个小白 rom包免费获取与体验请关注公众号:YouLinw的ROM日常 资料备份 使用小米自带的打包备份工具,将文件备份到电脑上 或使用小米自带的云服务功能,我开了会员。换了…

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码)

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码) 基本概念典型相关分析综合评价模型对应分析因子分析聚类分析 习题10.41. 题目要求2.解题过程3.程序 习题10.51. 题目要求2.解题过程3.程序 习题10.6(1&a…

C : DS二叉排序树之删除(详细思路解答)

Description 给出一个数据序列,建立二叉排序树,并实现删除功能 对二叉排序树进行中序遍历,可以得到有序的数据序列 Input 第一行输入t,表示有t个数据序列 第二行输入n,表示首个序列包含n个数据 第三行输入n个数据…

《PySpark大数据分析实战》-15.云服务模式Databricks介绍创建集群

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

FastAPI访问/docs接口文档显示空白、js/css无法加载

如图: 原因是FastAPI的接口文档默认使用https://cdn.jsdelivr.net/npm/swagger-ui-dist5.9.0/swagger-ui.css 和https://cdn.jsdelivr.net/npm/swagger-ui-dist5.9.0/swagger-ui-bundle.js 来渲染页面,而这两个URL是外网的CDN,在国内响应超…

云仓酒庄的品牌雷盛红酒LEESON分享红酒存放几年质量最佳?

云仓酒庄的品牌雷盛红酒LEESON分享对于酒的看法,有人认为“酒是陈的香”,酒越老越好。不过对于葡萄酒来说,这种说法不完全对,如果一款葡萄酒等待的时间太久,未必是件好事。对待葡萄酒也要把握一个“度”,既…

STM32启动过程

STM32启动模式(自举模式) M3/3/7等内核,复位后做的第一件事: 从地址0x0000 0000处取出栈指针MSP的初始值,该值就是栈顶地址。从地址0x0000 0004处取出程序计数器指针PC的初始值,该值是复位向量。 芯片厂商…

【BIG_FG_CSDN】*VMware17pro*Linux*Redhit6网络管理(个人向——学习笔记)

物理机中的网络 查看物理网络的方法 “网络连接”—>单点选中网络的选项-->菜单栏中“查看此连接状态”-->“详细信息” “网络连接”中的VM网卡 在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡,它们分别…

Python四种配色方案,适合科研的配色

1、Plasma(等高线图颜色)2、Inferno(黑热图颜色)3、Cividis(较好的配色方案,适用于色盲)4、Viridis(绿色主导的配色方案) 下面这四种配色是不需要指定的,Pyth…

个微和企微,哪个做私域流量的优势更大?

个人微信和企业微信是目前最为常用的私域经营平台,那在功能和使用上都有哪些区别: 1、开通对象不同: 个人微信是个人用户,个人就可以申请开通使用; 企业微信则要由企业在官方网站申请开通,并完成实名认证…

泰坦陨落2找不到msvcr120文件的修复方法,分享多种解决方法

在玩泰坦陨落2这款游戏时,有些玩家可能会遇到找不到msvcr120.dll文件的问题。这个问题可能是由于游戏缺少必要的运行库导致的。下面我将分享一些解决这个问题的方法,希望对大家有所帮助。 一、问题分析 msvcr120.dll是Microsoft Visual C Redistributab…

C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

一招教你如何绕过OpenAI API key创建时需要手机号验证

一招教你如何绕过OpenAI API key创建时需要手机号验证 虽然现在 ChatGPT 注册门槛极大地降低。但是,如果你是开发者或者需要第三方应用接入ChatGPT,此时就需要获取一个 API key,然而你可能会发现在你在创建 key 的过程中需要进行手机号验证。…

可控硅(晶闸管)原理图及可控硅工作原理分析

可控硅(晶闸管)原理图 可控硅T在工作过程中,它的阳极A和阴极K与电源和负载连接,组成可控硅的主电路,可控硅的门极G和阴极K与控制可控硅的装置连接,组成可控硅的控制电路。 从可控硅的内部分析工作过程: 可控硅是四层…

校园转转二手市场源码+Java二手交易市场整站源码

源码介绍 校园转转二手市场源码分享,Java写的应用,mybatis-plus 和 Hibernate随心用 后台地址:/home/index/index 账号密码:admin/123456 前台地址:/system/login