圆月山庄资源网 Design By www.vgjia.com
压缩复制删除文件基于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: 若递归扫描所有文件夹过程中有文件夹里不存在文件, 该文件夹将被忽略
总结
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月02日
2024年11月02日
- lol全球总决赛lck一号种子是谁 S14全球总决赛lck一号种子队伍
- BradMehldau-ApresFaure(2024)[24-96]FLAC
- IlCannone-FrancescaDegoPlaysPaganinisViolin(2021)[24-96]FLAC
- Tchaikovsky,Babajanian-PianoTrios-Gluzman,Moser,Sudbin[FLAC+CUE]
- 费玉清.1987-费玉清十周年旧曲情怀4CD【东尼】【WAV+CUE】
- 群星.2024-春花焰电视剧影视原声带【TME】【FLAC分轨】
- 方力申.2008-我的最爱新曲+精丫金牌大风】【WAV+CUE】
- 群星 《2024好听新歌35》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《烧透你的耳朵1》DXD金佰利 [低速原抓WAV+CUE][1.2G]
- 莫文蔚《超级金曲精选2CD》SONY [WAV+CUE][1.6G]
- 【RR】加尼克奥尔森GarrickOhlsso《贝多芬钢琴协奏曲全集》原声母带WAV
- 彭芳《纯色角1》[WAV+CUE]
- 李蔓《山顶的月亮—李蔓动态情歌》
- 梁咏琪.1999-新鲜【EEI】【WAV+CUE】
- 张琍敏.1979-悲之秋【海山】【FLAC分轨】