python使用zipfile解压后中文文件名乱码的问题

爬虫的时候由于很多打包下载zip的文件,而zip压缩包内的文件却是中文的,导致解压出来的文件是乱码的情况。

解压后的文件名大概是这个样子的 ╩Θ╔·╧└.txt  正常编码是  书生侠.txt

image

而这其实并不是因为文件编码问题导致,仅仅是文件名的编码。所以只处理文件名部分。如果要处理文件部分可以直接百度搜索即可【其实就是把对应用encode(‘cp437’).decode(‘gbk’)处理下,我这里只是处理了文件名字】

)。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : kinggoo
# @Software: 鳗鱼是条狗
# @Cnblogs :https://kinggoo.com/pyzipfilenamebad.htm
import os
from pathlib import Path
import zipfile

def file_name(file_dir):
    i=0
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if os.path.splitext(file)[1] == '.zip':
                i = i + 1
                zippath = file_dir + '\\' + file
                zfile = zipfile.ZipFile(zippath, 'r', zipfile.ZIP_DEFLATED)
                for zip_file in zfile.namelist():
                    try:
                        zipn = zip_file.encode('cp437').decode('gbk')
                    except:
                        zipn = zip_file.encode('utf-8').decode('utf-8')

                    print("在处理的压缩包文件名:%s" %zipn)
                    if os.path.isfile(file_dir + '/' +zipn):
                        print("被解压文件已存在:%s" % file_dir + '/' +zipn)
                        continue

                    zfile.extract(zip_file,file_dir + '/tmp/')
                    os.chdir(file_dir + '/tmp/')
                    os.rename(zip_file,file_dir + '/' + zipn)
                    print("%s -  %s "%(zip_file,file_dir + '/' +zipn))
                print("已处理第 %s 个压缩包"  %i)


    print("完成"+str(i))
if __name__=="__main__":
    file_name(r'Z:\txt\9')
- THE END -
版权声明:
转载原创文章请注明,文章出处://kinggoo.com
原文地址:https://kinggoo.com/pyzipfilenamebad.htm
发表评论?

0 条评论。

发表评论


此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据