当前位置: 首页 > news >正文

用python解压zip文件

因为某个需求,需要用python处理解压文件,这里记录下完成的代码,需要注意的是删除解压出来的文件夹时,很多博客都说直接用removedirs就行,实际我在py3.7上测试会提示“文件夹非空”,而且想想如果直接移除了根目录还是很恐怖的,所以我这边做的处理是用MD5作为解压文件夹名称,然后删除的时候判断文件路径长度至少在32以上才执行删除

"""
用于处理文件解压缩以及删除操作
"""
import hashlib
import os
import tarfile
import zipfile
import shutilclass PackProcessor:"""用于处理文件压缩,解压缩以及删除的操作"""unzip_path = ""def __init__(self):"""初始化"""@staticmethoddef compute_md5(fpath: str):"""计算压缩文件的md5值"""with open(fpath, 'rb') as f:md5_hash = hashlib.md5()for chunk in iter(lambda: f.read(4096), b""):md5_hash.update(chunk)hex_digest = md5_hash.hexdigest()return hex_digest@staticmethoddef unzip(fpath: str):"""解压缩文件"""unzip_dir = Nonetry:file_md5 = PackProcessor.compute_md5(fpath)local_dir = os.path.dirname(fpath)unzip_dir = os.path.join(local_dir, file_md5)PackProcessor.unzip_path = unzip_dirif fpath.endswith(".tar.gz"):with tarfile.open(fpath, 'r') as tar:tar.extractall(unzip_dir)elif fpath.endswith(".whl") or fpath.endswith(".egg") or \fpath.endswith(".zip"):with zipfile.ZipFile(fpath, 'r') as zip_file:zip_file.extractall(unzip_dir)else:print("是暂不支持解压的文件")return Noneexcept Exception as e:print("解压失败", e)return unzip_dir@staticmethoddef delete_unzips():"""删除解压出来的文件"""if os.path.exists(PackProcessor.unzip_path) and len(PackProcessor.unzip_path) >= 32:# 直接删除文件夹太危险,防止异常情况直接删除根目录try:shutil.rmtree(PackProcessor.unzip_path)except Exception as e:print("尝试删除失败:", PackProcessor.unzip_path, e)@staticmethoddef get_dir_files(data_dir: str, file_type=''):"""获取指定文件夹下所有指定字符串结尾文件的全路径,返回一个列表"""result_ls = []for path, _, filelist in os.walk(data_dir):for filename in filelist:if filename.endswith(file_type):final_path = os.path.join(path, filename)final_path = final_path.replace('\\', '/')# 统一换成/结尾result_ls.append(final_path)return result_lsif __name__ == '__main__':pass

相关文章:

用python解压zip文件

因为某个需求,需要用python处理解压文件,这里记录下完成的代码,需要注意的是删除解压出来的文件夹时,很多博客都说直接用removedirs就行,实际我在py3.7上测试会提示“文件夹非空”,而且想想如果直接移除了根…...

代码随想录22| 216.组合总和III, 17.电话号码的字母组合

216.组合总和III 题目链接/文章讲解:链接地址 视频讲解:链接地址 代码思路:回溯三部曲: 1.确定函数参数:n,k,sum,startIndex; 2.结束条件,path k,并且如果sumn 结束递归 3.递归回溯逻辑。 class Solution…...

ITIL4—战略与指导

战略与指导 成功的服务提供,需要朝着商定的目标采取协调一致的行动。本节将探讨服务供应商战略的创建和管理,其目的是首先对战略的本质、范围,以及战略与指导的关系建立基本的理解,然后为与该战略一致的指导活动提供指导。 本节…...

【Spring】Spring循环依赖(超重要!!)

目录 什么是循环依赖问题 循环依赖具体是怎么解决的 具体的解决步骤: 通俗实例: 严谨的循环依赖解决图例 为什么使用的是三级缓存,二级缓存不够用吗? 什么是循环依赖问题 Spring的循环依赖是指在Bean之间存在相互依赖关…...

数据分析之路应该是就此开启了

咱就是说工作以后,就是重新学习的开始啊。 祝自己顺顺利利。 前路漫漫亦灿灿。 数据分析之路,开启吧。 以下是借鉴网上的学习路线。 这个学习路线图主要分为以下几个部分: 基础知识 :包括数学、统计学和编程语言。这是数据分析的…...

win10如何配置jdk环境变量

1.首先要打开系统环境变量配置的页面。具体操作是:打开开始菜单,找到“此电脑”,然后右键“更多”→“属性”。 2.在弹出的页面,选择“高级系统设置” 3.在弹出的页面,选择“环境变量(N)…”。 …...

pm4py使用指南(非机翻)

目录 1. 日志数据读取及预处理(1)查看case和event数量(2)查看起始事件和结束事件(3)时间戳格式的问题 2. 日志数据过滤3. 流程发现4. 模型转化5. 模型可视化 1. 日志数据读取及预处理 通过 pandas库 读取c…...

ChatGPT帮助提升工作效率和质量:完成时间下降40%,质量评分上升 18%

自ChatGPT去年11月发布以来,人们就开始使用它来协助工作,热心的用户利用它帮助撰写各种内容,从宣传材料到沟通话术再到调研报告。 两名MIT经济学研究生近日在《科学》杂志上发表的一项新研究表明,ChatGPT可能有助于减少员工之…...

第二章 搜索

本篇博文是笔者归纳汇总的AcWing基础课题集,方便读者后期复盘巩固~ PS:本篇文章只给出完整的算法实现,并没有讲解具体的算法思路。如果想看算法思路,可以阅读笔者往期写过的文章(或许会有),也可…...

transform_train.json文件解析

transform_train.json 文件内容解析transform_matrix 文件内容解析 {"camera_angle_x": 0.6911112070083618,"frames": [{"file_path": "./train/r_0","rotation": 0.012566370614359171,"transform_matrix": [[…...

Wlan——锐捷零漫游网络解决方案以及相关配置

目录 零漫游介绍 一代零漫游 二代单频率零漫游 二代双频率零漫游 锐捷零漫游方案总结 锐捷零漫游方案的配置 配置无线信号的信道 开启关闭5G零漫游 查看配置 零漫游介绍 普通的漫游和零漫游的区别 普通漫游 漫游是由一个AP到另一个AP或者一个射频卡到另一个射频卡的漫…...

分布式锁系列之zookeeper分布式锁和mysql分布式锁

目录 介绍 下载安装 基本指令​编辑 java集成zookeeper 官方提供版 永久节点 临时节点​编辑 永久序列化节点 判断当前节点是否存在 获取当前节点中的数据内容 获取当前节点的子节点 更新节点内容 删除节点 zookeeper实现分布式锁 Mysql实现分布式锁 总结 介绍 ZooK…...

Ubuntu部署PHP7.4

系统版本:Ubuntu22.04 PHP版本: 7.4 Mysql版本:8.0 Nginx版本: 最新 1. 更新系统 首先,确保系统包是最新的: sudo apt update && sudo apt upgrade -y2. 安装 Nginx Nginx 在默认的 Ubuntu 仓库中,因此安装…...

WPF中的数据转换-StringFormat

WPF中的数据转换-StringFormat 前言 字符串格式化。使用该功能可以通过设置Binding.StringFormat属性对文本形式的数据进行转换——例如包含日期和数字的字符串。对于至少一半的格式化任务,字符串格式化是一种便捷的技术。 使用 当设置Binding.StringFormat属性…...

java.lang.UnsupportedOperationException解决方法

java.lang.UnsupportedOperationException解决方法 先放错误信息业务场景报错分析先看报错代码位置进入源码查看至此 真相大白 解决方法总结 先放错误信息 业务场景 已知有学生 张三李四王五赵六 等人 private List<String> nameList Arrays.asList("张三", &…...

docker for window更改到非系统盘的使用记录

1、使用Hyper-v模式的docker安装 2、安装docker for windows后安装目录没办法自己选择&#xff0c;固定在c盘 卸载后通过命令行方式设置软连接方式后重新安装来让其安装到软连接的d盘&#xff0c;解决c盘空间问题 mklink /j "C:\Program Files\Docker" "D:\Pr…...

day 38 | ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

518. 零钱兑换 II 这道题就是完全背包问题&#xff0c;因为可以选择的数量是无限的。所以第二层的遍历顺序就是从前往后。 因为是次数问题&#xff0c;递推公式是 的&#xff0c;初值应该设定为dp【0】 1&#xff0c;否则无法进行累加。 func change(amount int, coins []i…...

写得了代码,焊得了板!嵌入式开发工程师必修之代码管理方案(中)

目录 2.2 分仓、权限与依赖问题 2.3 基于 Git 进行多仓管理 Git submodule Git subtree Script/CMake Git-Repo Conan 本文来自 武让 极狐GitLab 高级解决方案架构师 &#x1f31f; 前一篇文章&#xff0c;作者介绍了嵌入式开发场景的代码管理特点与诉求&#xff0c;以及…...

Interlij IDEA 运行 ruoyi 后端项目。错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication

错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication 用了 IDEA运行&#xff0c;参考以下issue删除.idea目录也没有用 (官方文档写是用Eclipse运行&#xff09; 错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication Issue #I48N2X 若依/RuoYi-C…...

相机设置报错记录

Camera->SetPosition(0.0, -980, 0.0);Camera->SetFocalPoint(0.0, 0.0, 0.0);Camera->SetViewUp(0.0, 1.0, 0.0);上述代码出现错误提示Resetting view-up since view plane normal is parallel&#xff0c;这个时候是viewup方向与投影方向平行了&#xff0c;而出现的…...

2026年西安SEO优化指南:如何甄选靠谱的本地排名服务商

在西安&#xff0c;无论是传统制造业、文旅产业&#xff0c;还是新兴的科技公司&#xff0c;都面临着同一个问题&#xff1a;如何在搜索引擎上被潜在客户快速找到&#xff1f;搜索引擎优化&#xff08;SEO&#xff09;已成为企业线上获客的“必修课”。然而&#xff0c;市场服务…...

2026年家用投影仪品牌怎么选?聚焦画质准度的工程师推荐

2026年高端家用投影仪哪个品牌最好&#xff1f;基于评分卡模型的权威品牌排行备选标题&#xff1a;2026年高端家用投影仪哪个品牌最好&#xff1f;四大品牌量化评分终极排行从色彩科学到口碑&#xff1a;2026年高端家用投影仪品牌深度评测榜预算2万到5万&#xff1a;2026年明基…...

终极OBS Studio直播软件指南:5步打造专业级智能直播系统

终极OBS Studio直播软件指南&#xff1a;5步打造专业级智能直播系统 【免费下载链接】obs-studio OBS Studio - 用于直播和屏幕录制的免费开源软件。 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio 想象一下这样的场景&#xff1a;你正在直播一场重要的…...

ORCAD TCL脚本菜单化加载与性能调优实践

1. ORCAD TCL脚本菜单化加载的必要性 作为一名在电子设计自动化领域摸爬滚打多年的工程师&#xff0c;我深刻理解ORCAD用户在使用TCL脚本时遇到的痛点。当你的脚本库逐渐壮大&#xff0c;每次启动ORCAD都要自动加载几十个脚本文件&#xff0c;那种等待的煎熬简直让人抓狂。我曾…...

从IPython和REPL中找灵感:用prompt_toolkit打造你的专属Python交互式环境

从IPython和REPL中找灵感&#xff1a;用prompt_toolkit打造你的专属Python交互式环境 在Python开发者的日常工作中&#xff0c;交互式环境是不可或缺的伙伴。无论是快速验证代码片段、调试复杂逻辑&#xff0c;还是探索数据结构和API行为&#xff0c;一个优秀的交互式环境能显…...

Video2X:让你的老旧视频焕发新生的AI魔法工具

Video2X&#xff1a;让你的老旧视频焕发新生的AI魔法工具 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video…...

终极指南:如何使用Docker Stacks与Git Hooks实现自动化代码质量检查

终极指南&#xff1a;如何使用Docker Stacks与Git Hooks实现自动化代码质量检查 【免费下载链接】docker-stacks Ready-to-run Docker images containing Jupyter applications 项目地址: https://gitcode.com/gh_mirrors/do/docker-stacks Docker Stacks是一个提供现成…...

# WebNFC:让网页也能“碰一碰”实现设备交互的新可能随着移动互联网的快速发展,**近场通信(NFC)技术**逐渐从支付场景走

3 webNFC&#xff1a;让网页也能“碰一碰”实现设备交互的新可能 随着移动互联网的快速发展&#xff0c;近场通信&#xff08;NFC&#xff09;技术逐渐从支付场景走向更广泛的应用领域。而在浏览器端&#xff0c;**WebNFC ApI*8 的出现彻底改变了我们与 NFC 设备交互的方式——…...

掌握NLP实践:从环境搭建到应用部署的6步学习指南

掌握NLP实践&#xff1a;从环境搭建到应用部署的6步学习指南 【免费下载链接】nlp-tutorial A list of NLP(Natural Language Processing) tutorials 项目地址: https://gitcode.com/gh_mirrors/nlp/nlp-tutorial 自然语言处理&#xff08;NLP&#xff09;作为人工智能领…...

JS逆向新手也能搞定:手把手教你用Node.js补全ali140滑块canvas环境(附完整代码)

JS逆向新手也能搞定&#xff1a;手把手教你用Node.js补全ali140滑块canvas环境&#xff08;附完整代码&#xff09; 第一次接触JS逆向时&#xff0c;看到那些复杂的加密逻辑和环境检测代码&#xff0c;确实让人望而生畏。特别是遇到canvas这种需要模拟浏览器环境的场景&#xf…...