压缩文件

# coding=utf-8
import os
import os.path
import zipfile
import sys
# import sys    这是python2.x中编码问题(此处忽略)
# reload(sys)
# sys.setdefaultencoding('utf8')  # windows下编码问题

"""
os.walk(文件地址)  : 返回一个三元组,root:本身文件夹的地址, dirs:是一个list,是该文件夹下所有目录的名字 ,files:同样也是list,该文件夹中所有的文件
"""


def gzip(zip_name, file_dir):         # 定义一个压缩函数, 传入压缩名和文件路径
    # zip_name = zip_name.decode('utf-8')
    # file_dir = file_dir.decode('utf-8')
    filelist = []                  # 空列表装文件路径
    if os.path.isfile(file_dir):     # 如果传入的路径是一个文件
        filelist.append(file_dir)     # 把文件路径加入列表
    else:  # 如果不是文件路径
        for root, dirs, files in os.walk(file_dir):   # 获取正在遍历的当前文件夹的本身地址
            for file in files:
                filelist.append(os.path.join(root, file))     # 拼接地址(本身文件夹地址加文件地址)

        # print('-----------------')
        # print(root)
        # print('-----------------')
        # print(files)
        print(filelist)

        zf = zipfile.ZipFile(zip_name, 'w', zipfile.zlib.DEFLATED)   # zipfile模块
        for tar in filelist:
            arc_name = tar[len(file_dir):]
            zf.write(tar, arc_name)
        zf.close()

    print("压缩成功!")


def unzip(zip_name, unzip_dir):
    unzip_dir = unzip_dir.decode('utf-8')  # 不转码会乱码
    zip_name = zip_name.decode('utf-8')  # 不转码zipfile报错
    if not os.path.exists(unzip_dir):
        os.mkdir(unzip_dir)
    zfobj = zipfile.ZipFile(zip_name)
    for file_name in zfobj.namelist():
        file_name = file_name.replace('\\', '/')
        if file_name.endswith('/'):
            # try:
            #     file_name = file_name.decode('utf-8')
            # except UnicodeDecodeError:
            #     file_name = file_name.decode('gbk')
            os.mkdir(os.path.join(unzip_dir, file_name))
        else:
            # try:
            ext_filename = os.path.join(unzip_dir, file_name)
            # except UnicodeDecodeError:
            #     ext_filename = os.path.join(unzip_dir, file_name.decode('gbk'))
            ext_filedir = os.path.dirname(ext_filename)
            if not os.path.exists(ext_filedir):
                os.mkdir(ext_filedir)
            data = zfobj.read(file_name)
            with open(ext_filename, 'w') as f:
                f.write(data)
    zfobj.close()


# import rarfile
#
#
# def unrar(rar_file, dir_name):  # rarfile需要unrar支持, linux下pip install unrar, windows下在winrar文件夹找到unrar,加到path里
#     rarobj = rarfile.RarFile(rar_file.decode('utf-8'))
#     rarobj.extractall(dir_name.decode('utf-8'))

def main():
    filePath = r"C:\Users\86177\Desktop\data11"
    # C:\Users\86177\Desktop\data11
    fileNamelist = os.listdir(filePath)
    print(fileNamelist)
    for item in fileNamelist:
        print(item)
        zip_name = filePath + "/" + item + '.zip'  # 这里将item遍历拼接路径
        file_dir = filePath + "/" + item
        gzip(zip_name, file_dir)

if __name__ == '__main__':
    main()


    # gzip(r'C:\Users\86177\Desktop\data11\nuuuuu1.zip', r'C:\Users\86177\Desktop\data11\null')


    # unzip(r'E:\Project\zip_adv\zip文件.zip', r'E:\Project\zip_adv\解压缩zip')
    # unrar(r'E:\Project\zip_adv\rar文件.rar', r'E:\Project\zip_adv\解压缩rar')


你可能感兴趣的:(压缩文件)