python 解压、复制、删除 文件的实例代码
作者:缘来释你 发布时间:2023-12-23 23:35:34
标签:python,解压,复制,删除,文件
压缩复制删除文件基于python语言怎么操作呢,压缩文件有四种格式:zip、rar、tar、tar.gz,在压缩过程中也容易出现很多问题,今天小编通过代码给大家详解,具体内容如下所示:
一、python3解压文件
1.python 解压文件代码示例
如下代码主要实现zip、rar、tar、tar.gz四种格式的压缩文件的解压
def unzip_file(src_file, dst_dir=None, unzipped_files=None, del_flag=True):
"""
根据指定的压缩文件类型递归解压所有指定类型的压缩文件
:param src_file: 解压的源文件路径,可以为文件夹路径也可以是文件路径
:param dst_dir: 解压后的文件存储路径
:param unzipped_files: 完成解压的文件名列表
:param del_flag: 解压完成后是否删除原压缩文件,默认删除
:return: 完成解压的文件名列表
"""
# 完成解压的文件名列表初始为空
if unzipped_files is None:
unzipped_files = []
# 指定的解压文件类型
zip_types = ['.zip', '.rar', '.tar', '.gz']
def exec_decompress(zip_file, dst_dir):
"""
解压实现的公共代码
:param zip_file: 压缩文件全路径
:param dst_dir: 解压后文件存储路径
:return:
"""
file_suffix = os.path.splitext(zip_file)[1].lower()
try:
print('Start extracting the file: %s' % zip_file)
# zip 解压
if file_suffix == '.zip':
# zip解压 写法一
with ZipFile(zip_file, mode='r') as zf:
zf.extractall(dst_dir)
# zip解压 写法二
# file_zip = ZipFile(zip_file, mode='r')
# for file in file_zip.namelist():
# file_zip.extract(file, dst_dir)
# file_zip.close()
# rar 解压
elif file_suffix == '.rar':
rf = rarfile.RarFile(zip_file)
rf.extractall(dst_dir)
# tar、tgz(tar.gz) 解压
elif file_suffix in ['.tar', '.gz']:
tf = tarfile.open(zip_file)
tf.extractall(dst_dir)
# 关闭文件释放内存
tf.close()
print('Finished extracting the file: %s' % zip_file)
except Exception as e:
print(e)
# 解压完成加入完成列表
unzipped_files.append(zip_file)
# 根据标识执行原压缩文件删除
if del_flag and os.path.exists(zip_file):
os.remove(zip_file)
# 如果传入的文件路径为文件目录,则遍历目录下所有文件
if os.path.isdir(src_file):
# 初始化文件目录下存在的压缩文件集合为空
zip_files = []
# 如果传入的目的文件路径为空,则取解压的原文件夹路径
dst_dir = dst_dir if dst_dir else src_file
# 遍历目录下所有文件
for file in os.listdir(src_file):
file_path = os.path.join(src_file, file)
# 如果是文件夹则继续递归解压
if os.path.isdir(file_path):
dst_path = os.path.join(dst_dir, file)
unzip_file(file_path, dst_path, unzipped_files)
# 如果是指定类型的压缩文件则加入到压缩文件列表
elif os.path.isfile(file_path) and os.path.splitext(file_path)[
1].lower() in zip_types and file_path not in unzipped_files:
zip_files.append(file_path)
# 遍历压缩文件列表,执行压缩文件的解压
for zip_file in zip_files:
exec_decompress(zip_file, dst_dir)
# 如果当前目录存在压缩文件则完成所有文件解压后继续遍历
if zip_files:
unzip_file(dst_dir, unzipped_files=unzipped_files)
# 如果传入的文件路径是指定类型的压缩文件则直接执行解压
elif os.path.isfile(src_file) and os.path.splitext(src_file)[1].lower() in zip_types:
dst_dir = dst_dir if dst_dir else os.path.dirname(src_file)
exec_decompress(src_file, dst_dir)
return unzipped_files
2.python解压常见问题解决办法
2.1 python3 zipfile解压文件名乱码解决办法
直接修改源码,即 zipfile.py 文件:
第一处:
if flags & 0x800:
# UTF-8 file names extension
filename = filename.decode('utf-8')
else:
# Historical ZIP filename encoding
# 注释原代码
# filename = filename.decode('cp437')
# 新加一行代码
filename = filename.decode('gbk')
第二处:
if zinfo.flag_bits & 0x800:
# UTF-8 filename
fname_str = fname.decode("utf-8")
else:
# 注释原代码
# fname_str = fname.decode("cp437")
# 同样新加一行代码
fname_str = fname.decode('gbk')
2.1 rar 解压无法找到动态库(unrar.dll)解决办法
报错示例:
第一步 手动下载动态库文件 unrar.dll 存在本地目录,例如我的本地存储路径为:C:\MySoft\assist\unrar.dll
链接: https://pan.baidu.com/s/1rqhFND9XmtD1Y8yGLEz9kA 提取码: u2my
第二步 修改源码 unrarlib.py 文件
if platform.system() == 'Windows':
from ctypes.wintypes import HANDLE as WIN_HANDLE
HANDLE = WIN_HANDLE
UNRARCALLBACK = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_uint,
ctypes.c_long, ctypes.c_long,
ctypes.c_long)
# 注释原代码
# lib_path = lib_path or find_library("unrar.dll")
# 将路径指向下载的动态库文件存储路径
lib_path = r"C:\MySoft\assist\unrar.dll"
if lib_path:
unrarlib = ctypes.WinDLL(lib_path)
知识点扩展:python 压缩文件夹的代码
def zip_ya(start_dir):
start_dir = start_dir # 要压缩的文件夹路径
file_news = start_dir + '.zip' # 压缩后文件夹的名字
z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED)
for dir_path, dir_names, file_names in os.walk(start_dir):
f_path = dir_path.replace(start_dir, '') # 这一句很重要,不replace的话,就从根目录开始复制
f_path = f_path and f_path + os.sep or '' # 实现当前文件夹以及包含的所有文件的压缩
for filename in file_names:
z.write(os.path.join(dir_path, filename), f_path + filename)
z.close()
return file_news
PS: 若递归扫描所有文件夹过程中有文件夹里不存在文件, 该文件夹将被忽略
来源:https://www.cnblogs.com/keh123000/p/12358835.html
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 本文为大家分享了windows下pycharm安装、创建文件、配置默认模板的具体步骤,供大家参考,具体内容如下步骤: 下包 —->安装
- 在使用python通过open()函数来打开文件的时候,传递绝对路径给open()的时候,发现路径参数的内容与想象中的有所出入:由于wind
- 散点图什么是散点图?散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图, 散点图表示因变量随自变量而变化的大致趋势,
- 一、先进行剪切操作圆形区域占图片可能不多,多余的部分不要。看下图。只要纽扣电池内部和少许的边缘部分,其余黑色背景部分不需要。先沿着纽扣电池的
- SELECT表名=case when a.colorder=1 then d.name else '' end,表说明=ca
- 技术背景对于一些连续运行或者长时间运行的Python程序而言,如服务器的后端,或者是长时间运行的科学计算程序。当我们涉及到一些中途退出的操作
- 问题:希望仅仅允许某个指定IP的计算机连接到SQL Server服务器,但不允许其他的客户端进行连接。解决方法如下:你可以直接在防火墙中做限
- Windows下ORACLE完全卸载:使用OUI可以卸载数据库,但卸载后注册表和文件系统内仍会有部分残留。这些残留不仅占用磁盘空间,而且影响
- 本文以实例形式介绍了python turtle模块即海龟绘图的使用方法,对于需要进行图形编程的朋友相信会有一定的借鉴价值。python tu
- moviepy官网:https://pypi.org/project/moviepy/是一个用于视频编辑的Python库:切割、连接、标题插
- Labelme简要介绍通过labelme对图进行标注后,得到的是json文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式
- 本文实例讲述了Thinkphp5.0 框架的请求方式与响应方式。分享给大家供大家参考,具体如下:Thinkphp5.0 的请求方式方法一(使
- 目标在本章中,将了解:如何生成OpenCV-Python bindings如何将新的OpenCV模块扩展到PythonOpenCV-Pyth
- Response是负责将信息传递给用户的对象,它可动态地响应客户端的请求,并将动态生成的响应结果返回给客户端浏览器。 一,Resp
- 缩进Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块
- 在上一讲代码的基础上,做进一步修改,成为了如下程序,请看官研习这个程序:#!/usr/bin/env python#coding:utf-8
- 一般删除文件时使用os库,然后利用os.remove(path)即可完成删除,如果删除空文件夹则可使用os.removedirs(path)
- 菜单栏,tools--去掉勾选的Vim Emulator这个仿真插件就好了。来源:https://blog.csdn.net/weixin_
- 本文实例为大家分享了基于numpy实现逻辑回归的具体代码,供大家参考,具体内容如下交叉熵损失函数;sigmoid激励函数基于numpy的逻辑
- python脚本执行的3种方法:(找到自己能够使用的方法,能用的方法就是好方法)方法一:交互模式直接执行语句交互模式下直接编写执行 Pyth