使用python3 批量删除oss的文件

news/2025/3/29 10:36:48/文章来源:https://www.cnblogs.com/pgyLang/p/18792905
import oss2
import re
import logging
from datetime import datetime
import os# 配置可修改的参数
cutoff_year = 2024  # 需要删除该年份之前的文件 文件名中包含日期的文件 2024-01-01
cutoff_month = 1  # 需要删除该月份之前的文件
batch_size = 1000  # 每批次删除的文件数量def setup_logger():log_dir = "logs"os.makedirs(log_dir, exist_ok=True)log_filename = f"{log_dir}/oss_delete_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] [%(funcName)s] %(message)s",handlers=[logging.FileHandler(log_filename),logging.StreamHandler()])return logging.getLogger()# 配置OSS访问信息
access_key_id = ''
access_key_secret = ''
bucket_name = ''
# 外网
endpoint = ''  # 例如:'http://oss-cn-beijing.aliyuncs.com'
# 内网
# endpoint = '' auth = oss2.Auth(access_key_id, access_key_secret)
bucket = oss2.Bucket(auth, endpoint, bucket_name)
logger = setup_logger()def delete_old_files(prefix='logs/'):marker = ''cutoff_date = datetime(cutoff_year, cutoff_month, 1)  # 删除该日期之前的文件pattern = re.compile(r'(?:\.log\.|log-)(\d{4}-\d{2}-\d{2})[_\.]\d+\.log\.gz$')loop_count = 0  total_deleted = 0  while True:loop_count += 1keys_to_delete = []try:result = bucket.list_objects(prefix=prefix, marker=marker, max_keys=1000)logger.info(f"成功获取 {len(result.object_list)} 个对象,当前 marker: {marker}")except Exception as e:logger.error(f"获取文件列表失败: {e}")breakobjects = result.object_listif not objects:logger.info("没有符合条件的文件可删除")breakfor obj in objects:key = obj.keymatch = pattern.search(key)if not match:logger.debug(f"文件未匹配: {key}")continue  file_date_str = match.group(1)  try:file_date = datetime.strptime(file_date_str, "%Y-%m-%d")except ValueError:logger.warning(f"无法解析日期: {file_date_str} (文件: {key})")continue  if file_date < cutoff_date:logger.info(f"标记删除文件: {key}, 日期: {file_date_str}")keys_to_delete.append(key)# **确保批量删除**if len(keys_to_delete) >= batch_size:total_deleted += batch_delete(keys_to_delete)keys_to_delete = []# **确保循环结束后删除剩余文件**if keys_to_delete:total_deleted += batch_delete(keys_to_delete)marker = result.next_markerif not result.is_truncated:break  logger.info(f"总循环次数: {loop_count},删除的总文件数: {total_deleted}")def batch_delete(keys):"""执行批量删除,并返回删除的文件数"""try:bucket.batch_delete_objects(keys)logger.info(f"成功删除 {len(keys)} 个文件: {', '.join(keys[:5])}... 等")return len(keys)except oss2.exceptions.OssError as e:logger.error(f"删除失败: {e}, 失败的文件列表: {keys}")return 0if __name__ == "__main__":logger.info(f"开始执行OSS文件清理任务,删除 {cutoff_year} 年 {cutoff_month} 月之前的文件")try:delete_old_files()logger.info("所有符合条件的文件已处理完毕!")except Exception as e:logger.error(f"任务执行失败: {e}")

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

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

相关文章

会计学-现金流表(三)

介绍 什么是现金流量表?:就是反映你当前现金状况的一个表。 由四个部分构成:期初现金 + 本期流入现金 - 本期流出现金 = 期末现金一个企业或者一个家庭很多时候,即使是落入资不抵债的局面,也未必就会陷入破产,只要他的现金流可以一直维持日常运转,就可以不需要被迫去变卖…

会计学-资产负债表(二)

介绍 什么是资产负债表?:反映的是一家公司或者是一个家庭在某一时刻体量的表。 公式是:资产 = 负债 + 所有者权益。 资产负债表分成左右两栏,左边是资产,右边是负债和权益。 资产表示你的家底有多厚,负债和权益表示这些家底是从哪里来的。会计学上的资产负债表比较复杂的…

王炸!Kafka 4.0 重磅发布,Java 8 和 Zookeeper 彻底被抛弃了,一个时代结束了!

大家好,我是R哥。 Kafka 4.0 终于来了!这次更新可不只是常规的版本优化,而是一次重大架构调整,尤其是不再支持 Java 8,彻底移除了 Zookeeper,正式启用 KRaft 模式,让 Kafka 变得更加独立、高效。 除了这个重磅更新外,Kafka 4.0 还砍掉了一些历史包袱,还带来几个重磅新…

会计学-开篇(一)

介绍 是不是觉得会计学极其枯燥,死板,无趣?因为会计准则本身就是人为设定的游戏规则,整个学习过程感觉就是一直在背诵各种条条框框,完全没有创造性。相比之下,不管是数学,编程,物理学,生物学,投资学,都显得很有意思,这些学科都是帮助我们通向创造。而会计学似乎只会…

会计学-开篇

介绍 是不是觉得会计学极其枯燥,死板,无趣?因为会计准则本身就是人为设定的游戏规则,整个学习过程感觉就是一直在背诵各种条条框框,完全没有创造性。相比之下,不管是数学,编程,物理学,生物学,投资学,都显得很有意思,这些学科都是帮助我们通向创造。而会计学似乎只会…

2 小时,我搭好了“一物一码” 的设备巡检管理系统!

说实话,以前每次看到设备巡检表上那些手写的记录,我就头疼——字迹潦草、容易丢、查起来还费劲。直到昨天下午,我实在忍不了了,决定自己动手搞个"一物一码"的巡检系统。 从零到落地,现在所有设备贴个二维码,手机一扫就能查记录、报故障,还能自动生成报表! 老…

2022-PTA正式赛-L1-8 静静的推荐(思路)

未达到分数线passAcCode: #include<bits/stdc++.h> using namespace std; int vis[100010]; int main(){int N, K, S, ans = 0;cin >> N >> K >> S;while(N--){int sc1, sc2;cin >> sc1 >> sc2;if(sc1 < 175) continue;if(sc1 >= 17…

GlusterFS 三节点集群部署指南(Heketi 管理模式)

前言:随着信息技术的飞速发展,数据量呈爆炸式增长,传统的集中式存储系统已经难以满足现代应用对存储容量、性能和可靠性的苛刻需求。分布式存储技术应运而生,而 GlusterFS 作为其中的杰出代表,凭借其简单却强大的架构设计,成为了存储领域的一颗新星。 GlusterFS 的魅力不…

性价比拉满!最新的ISP图像处理方案来啦,基于瑞芯微RK3562J全国产工业平台!

今天为大家带来基于瑞芯微RK3562J工业平台的ISP图像处理方案,不仅低成本、低功耗,更能让图像清晰呈现!下面,一起来深入探究看它如何实现!ISP的作用与优势 何为ISP?全称为Image Signal Processor(图像信号处理器),其主要作用是处理前端图像传感器输出的信号,主要功能有…

什么是受管文件传输(MFT)?对企业有何价值和作用?

一、什么是受管文件传输(MFT)? 受管文件传输(Managed File Transfer, MFT),也可以称为“托管文件传输”,是一种专门用于安全、可靠地传输文件的解决方案。与传统的文件传输方式(如电子邮件、FTP)相比,MFT提供了更高的安全性、可管理性和自动化能力,能够满足企业对数…

FreeSWITCH 异常重启后会话快速恢复

FreeSWITCH 异常重启后会话快速恢复 配置 会话追踪sip_profiles/*.xml<param name="track-calls" value="true"/>(官方文档描述会有轻微性能影响) 存储恢复数据、修改数据库位置 重要 fs默认使用sqlite进行恢复数据的存储,也可以正常使用,但此处…

SpringSecurity5(10-动态权限管理)

Spring Security动态权限管理通过实时更新权限配置,支持按需调整用户权限,实现灵活的访问控制。结合注解、表达式等方式,能够动态加载和检查用户权限,无需重启系统,确保应用在复杂业务场景下的安全性与可扩展性,提升用户体验与管理效率。授权流程SpringSecurity 的授权流…