当前位置: 首页 > 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;而出现的…...

我的世界Java版1.21.4的Fabric模组开发教程(二)创建物品

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第二章——创建物品。想要阅读其他内容&#xff0c;请查看或订阅上面的专栏。 物品(Items) 指的是可以被玩家和其他实体拾起并使用的元素。想要在Minecraft中添加自己的物品&#xff0c;通常需要完成下面的步骤&…...

终极指南:Kalibr视觉惯性标定中的外参初始化策略全解析

终极指南&#xff1a;Kalibr视觉惯性标定中的外参初始化策略全解析 【免费下载链接】kalibr The Kalibr visual-inertial calibration toolbox 项目地址: https://gitcode.com/gh_mirrors/ka/kalibr Kalibr作为一款强大的视觉惯性标定工具箱&#xff08;The Kalibr visu…...

InstructPix2Pix实现Web端图像编辑:前端开发实战

InstructPix2Pix实现Web端图像编辑&#xff1a;前端开发实战 1. 为什么要把InstructPix2Pix搬到浏览器里 你有没有遇到过这样的场景&#xff1a;设计师同事发来一张产品图&#xff0c;需要临时把背景换成纯白&#xff1b;电商运营急着要一组节日主题的海报&#xff0c;但PS操…...

提示词工程的应用解析

提示词工程全解析&#xff1a;从入门到精通&#xff0c;让AI精准读懂你的需求[TOC](提示词工程全解析&#xff1a;从入门到精通&#xff0c;让AI精准读懂你的需求)提示词工程全解析&#xff1a;从入门到精通&#xff0c;让AI精准读懂你的需求一、引言&#xff1a;为什么提示词工…...

从《数据结构》到《Web技术》:我是如何用这些课程项目打造个人技术栈的?

从《数据结构》到《Web技术》&#xff1a;我是如何用课程项目构建技术栈的&#xff1f; 记得大二那年&#xff0c;当我盯着《数据结构》教材里的栈和队列概念发呆时&#xff0c;完全没意识到这些抽象理论会在两年后成为我开发景区管理系统的核心算法。计算机专业的课程就像散落…...

NoFences:重构桌面空间的区域化引擎

NoFences&#xff1a;重构桌面空间的区域化引擎 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 副标题&#xff1a;三步打造个性化桌面系统 痛点分析&#xff1a;你的桌面是…...

VMware虚拟机体验FLUX.1:Windows系统免环境配置方案

VMware虚拟机体验FLUX.1&#xff1a;Windows系统免环境配置方案 想快速体验最新的AI绘画技术却苦于环境配置&#xff1f;FLUX.1作为当前最强的开源文生图模型之一&#xff0c;让很多Windows用户望而却步。本文介绍一种零门槛的解决方案——通过VMware虚拟机一键体验&#xff0c…...

Turbo实战:如何用任务编排优化你的Monorepo构建流程?以pnpm+vitepress为例

Turbo实战&#xff1a;如何用任务编排优化你的Monorepo构建流程&#xff1f;以pnpmvitepress为例 在当今前端工程化领域&#xff0c;Monorepo已成为管理复杂项目的标配方案。但当项目规模增长到一定程度时&#xff0c;传统的构建方式往往会面临效率瓶颈——每次全量构建耗时漫长…...

从会议录音到字幕生成:基于FunASR和SpringBoot搭建一个轻量级语音处理中台

从会议录音到字幕生成&#xff1a;基于FunASR和SpringBoot搭建轻量级语音处理中台 每周例会后&#xff0c;行政小张总要花两小时反复听录音整理纪要。市场部的跨国会议录音&#xff0c;技术团队的头脑风暴存档&#xff0c;管理层战略讨论的逐字记录——这些音频文件堆积在共享…...

Granite TimeSeries FlowState R1电商销量预测实战:Vue前端可视化大屏

Granite TimeSeries FlowState R1电商销量预测实战&#xff1a;Vue前端可视化大屏 最近和几个做电商的朋友聊天&#xff0c;他们都在头疼同一个问题&#xff1a;备货。备多了怕压库存&#xff0c;备少了又怕错过销售高峰&#xff0c;眼睁睁看着流量来了却没货可发。传统的经验…...