Windows使用python解压zip包后文件乱码

目录

1. 导入所需模块

2. 改为gbk解码格式

3. 对一个zip包进行解压

4. 对所有zip包解压

5. 所有代码


windows 直接使用 zipfile 解压的压缩包有时会是乱码,需要先编码后再使用另一种格式解码

1. 导入所需模块

import os
from pathlib import Path as p
from zipfile import ZipFile

2. 改为gbk解码格式

# 使用gbk进行解码
def support_gbk(zip_file: ZipFile):
    name_to_info = zip_file.NameToInfo
    # copy map first
    for name, info in name_to_info.copy().items():
        real_name = name.encode('cp437').decode('gbk')  # zipfile默认使用的是cp437解码,而windows默认使用gbk;则先用cp437编码,再用gbk解码
        if real_name != name:
            info.filename = real_name
            del name_to_info[name]
            name_to_info[real_name] = info
    return zip_file

3. 对一个zip包进行解压

# 解压文件
def unzip_file(file_origin_path):
    file_target_path = file_origin_path.parent  # 解压后文件保存位置
    os.makedirs(file_target_path, exist_ok=True)  # 若路径不存在则创建
    zip_file = support_gbk(ZipFile(file_origin_path))  # 使用gbk格式解码
    zip_file.extractall(file_target_path)  # 文件解压缩
    zip_file.close()  # 关闭解压缩

4. 对所有zip包解压

def main():
    zip_file_flod = p(r"E:\黑马\Python高级-全部(html版)").resolve()  # zip包目录路径
    zip_file_list = zip_file_flod.glob("*.zip")  # 每个zip包的路径
    for zip_file in zip_file_list:  # 循环解压缩每个zip包
        unzip_file(zip_file)

5. 所有代码

"""
windows 直接使用 zipfile 解压的压缩包会是乱码,需要先编码后再使用另一种方式解码
"""

import os
from pathlib import Path as p
from zipfile import ZipFile


# 使用gbk进行解码
def support_gbk(zip_file: ZipFile):
    name_to_info = zip_file.NameToInfo
    # copy map first
    for name, info in name_to_info.copy().items():
        real_name = name.encode('cp437').decode('gbk')  # zipfile默认使用的是cp437解码,而windows默认使用gbk;则先用cp437编码,再用gbk解码
        if real_name != name:
            info.filename = real_name
            del name_to_info[name]
            name_to_info[real_name] = info
    return zip_file


# 解压文件
def unzip_file(file_origin_path):
    file_target_path = file_origin_path.parent  # 解压后文件保存位置
    os.makedirs(file_target_path, exist_ok=True)  # 若路径不存在则创建
    zip_file = support_gbk(ZipFile(file_origin_path))  # 使用gbk格式解码
    zip_file.extractall(file_target_path)  # 文件解压缩
    zip_file.close()  # 关闭解压缩


def main():
    zip_file_flod = p(r"E:\黑马\Python高级-全部(html版)").resolve()  # zip包目录路径
    zip_file_list = zip_file_flod.glob("*.zip")  # 每个zip包的路径
    for zip_file in zip_file_list:  # 循环解压缩每个zip包
        unzip_file(zip_file)


if __name__ == '__main__':
    main()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值