自动解压,zipfile.ZipFile(file),遇见中文报错

在工作中经常会遇见解压邮件或者发过来的压缩文件,最近发现,在zipfile处理中文时,会出现乱码的情况,代码如下:

     if ".zip" in os.path.splitext(file)[1]:

                      path = src_dir + "\\" + file

                      zip = zipfile.ZipFile(file, 'r')  # 待解压文件

                      zip_list = zip.namelist()

                      for zip_file in zip_list:

                          print(zip_file)

                          print(zip_file.encode('utf-8'))

                          zip.extractall(src_dir)  # 解压指定文件路径

                          os.remove(path)

                          zip.close


乱码

    在zip标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),而zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。

     查明原因后,如果标题已被正确识别为utf8编码时则不需再编码,如未被识别时则出现乱码。经修改如下,即可正常解压。


方法一:

修改zipfile.py文件中两处,重新执行脚本,即可编译成功,不会出现乱码情况

方法二:

    网上有很多,解压后将乱码名字修改为正确的中文名字,而实际业务发生时,解压后程序是占用文件,无法修改rename

with zipfile.ZipFile('love.zip', 'r') as zipobj: #读取压缩包

    for file_name in zipobj.namelist(): #遍历名称

        info = zipobj.getinfo(file_name)

        file_name = file_name.encode('cp437').decode('gbk')

        lis.append([file_name,info.file_size])

zip_list = zip.namelist()

                      for zip_file in zip_list:

                          file_size = zip.getinfo(zip_file).file_size

                          new_name = zip_file.encode('cp437').decode('gbk')

                          new_path = os.path.join(src_dir, new_name)

                          if file_size > 0:

                              with open(file=new_path, mode='wb') as f:

                                  # zf.read 是读取压缩包里的文件内容

                                  f.write(zip.read(zip_file))

                                  f.close()

                      zip.close()



# ZipFile.getinfo(name) 方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持如下属性:

# ZipInfo.filename:        获取文件名称。

# ZipInfo.date_time:        获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)

# ZipInfo.compress_type:    压缩类型。

# ZipInfo.comment:          文档说明。

# ZipInfo.extr:            扩展项数据。

# ZipInfo.create_system:    获取创建该zip文档的系统。

# ZipInfo.create_version:  获取 创建zip文档的PKZIP版本。

# ZipInfo.extract_version:  获取 解压zip文档所需的PKZIP版本。

# ZipInfo.reserved:        预留字段,当前实现总是返回0。

# ZipInfo.flag_bits:        zip标志位。

# ZipInfo.volume:          文件头的卷标。

# ZipInfo.internal_attr:    内部属性。

# ZipInfo.external_attr:    外部属性。

# ZipInfo.header_offset:    文件头偏移位。

# ZipInfo.CRC:              未压缩文件的CRC-32。

# ZipInfo.compress_size:    获取压缩后的大小。

# ZipInfo.file_size:        获取未压缩的文件大小。


备注:

若删除过程中提示“解决报错:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。PermissionError: [WinError 5] 拒绝访问。” ,则需要关闭所有占用的语句  close ,close()与close 效果不一样,请慎用哈

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容