爬虫的时候由于很多打包下载zip的文件,而zip压缩包内的文件却是中文的,导致解压出来的文件是乱码的情况。
解压后的文件名大概是这个样子的╩Θ╔·╧└.txt 正常编码是 书生侠.txt 。
而这其实并不是因为文件编码问题导致,仅仅是文件名的编码。所以只处理文件名部分。如果要处理文件部分可以直接百度搜索即可【其实就是把对应用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 -