python 解压zip ,rar 文件及编译错误的解决方法

解压zip

import os
import zipfile
def unzip(file_name):
    zip_file = zipfile.ZipFile(file_name)
    if os.path.isdir(file_name + "_files"):  #建立新的文件夹
        pass
    else:
        os.mkdir(file_name + "_files")
    for names in zip_file.namelist():  #循环压缩包中的文件并保存进新文件夹。
        zip_file.extract(names,file_name + "_files/")
    zip_file.close()
unzip("D:\\学习\\****.zip")

这段代码运行后不会发生什么错误,不过文件名如果有中文字,就会出现中文字变成乱码,这样影响自己查找文件及观看。

解决方法

第一种:

import shutil
import zipfile

with zipfile.ZipFile('D:\\学习\\****.zip', 'r') as zf:
    for fn in zf.namelist():
        right_fn = fn.encode('cp437').decode('gbk')  # 将文件名正确编码
        print(right_fn)
        right_fn =  'D:\\学习\\' + right_fn    #要准确的文件地址,否则会查找文件失败。
        with open(right_fn, 'wb') as output_file:  # 创建并打开新文件
            with zf.open(fn, 'r') as origin_file:  # 打开原文件
                shutil.copyfileobj(origin_file, output_file)  # 将原文件内容复制到新文件

第二种

将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.encode("cp437").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_str.encode("cp437").decode('gbk') #修改的代码

解压rar

解压rar 压缩包,需要python 安装rarfile 包,可以在cmd 窗口中输入:

pip install rarfile

 

import rarfile
import os
def un_rar(file_name):
    """unrar zip file"""
    rar = rarfile.RarFile(file_name)
    if os.path.isdir(file_name + "_files"):  #建立新文件夹
        pass
    else:
        os.mkdir(file_name + "_files")
    os.chdir(file_name + "_files") 
    rar.extractall()       #解压rar文件保存进文件夹
    rar.close() 
un_rar('D:\\学习\\****.rar') 

运行代码可能会出现以下的提示错误:

 Unrar not installed? (rarfile.UNRAR_TOOL='unrar')

 这是因为python 中没有安装有UnRAR.exe 这个文件,所以运行会失败

请以下链接下载UnRAR.exe 文件。 下载后将文件复制在 python脚本目录下,运行就不会出错了。

链接:https://pan.baidu.com/s/1rVgDMn2Lms7jVUUMaOHp3w
提取码:tm4r
 

你可能感兴趣的:(python)