python UnzipUnrar

时间:2019-02-14
本文章向大家介绍python UnzipUnrar,主要包括python UnzipUnrar使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

# 解压本地zip,rar压缩文件

问题:对rar压缩文件,zip压缩文件解压到本地
注意问题:解压到本地路径,需注意文件路径过长出错。
语言:python 2.3
code:

# -- * -- encoding:utf8 -- * --
import os

# 获取当前目录下所有目录
# 筛选出所有目录的以zip/rar为后缀的文件
# 添加到指定目录
# 解压到指定文件

import zipfile
from multiprocessing import Pool

import rarfile
import os


def un_zip(file_name):
    """unzip zip file"""
    new_path = os.path.splitext(file_name)[0]
    zip_file = zipfile.ZipFile(file_name)
    for names in zip_file.namelist():
        zip_file.extract(names, new_path)
    zip_file.close()


# 由于rar通常为window下使用,须要额外的Python包rarfile。
# 可用地址: http://sourceforge.net/projects/rarfile.berlios/files/rarfile-2.4.tar.gz/download
# 解压到Python安装文件夹的/Scripts/文件夹下,在当前窗体打开命令行,
# 输入Python setup.py install
# 下载UnRar.exe
# 链接:http://pan.baidu.com/s/1o8ObqCa 密码:dsru
# 放在当前文件夹,运行main.py。
def un_rar(file_name):
    """unrar rar file"""
    # 定义解压路径
    new_path = os.path.splitext(file_name)[0]
    rar = rarfile.RarFile(file_name)
    if os.path.isdir(new_path):
        pass
    else:
        os.mkdir(new_path)
    rar.extractall(new_path)
    rar.close()


# 返回 zip文件地址列表 rar文件地址列表
def fileUnZip(dir_path, zip_list, rar_list):
    files = os.listdir(dir_path)
    for i in files:
        i = os.path.join(dir_path, i)
        if os.path.isfile(i):
            # 为目录则重新调用
            # 筛选不同格式文件
            zip = '.zip'
            rar = '.rar'
            if os.path.splitext(i)[1] == zip:
                zip_list.append(i)
            elif os.path.splitext(i)[1] == rar:
                rar_list.append(i)
        elif os.path.isdir(i):
            file_list(i, zip_list, rar_list)


if __name__ == '__main__':
    # 路径
    dir_path = 'C:\Users\fixfire\unData'
    zip_list = []
    rar_list = []
    file_list(dir_path, zip_list, rar_list)
    # 进程数根据cpu数确定,可适量增减
    # 解压zip类型文件
    pool = Pool(5)
    for zip_file in zip_list:
        pool.apply(func=un_zip, args=(zip_file,))
    # 解压rar类型文件
    # pool_rep = Pool(5)
    # for rar_file in rar_list:
    #     pool.apply(func=un_rar,args=(rar_file,))