python 解壓文件,合並文件 打包成zip格式文件 生成MD5值


#!/usr/bin/env python
#_*_encoding:utf-8

# 2018/05/29
#augustyang
#2.0

'''
解壓文件,合並文件  打包成zip格式文件  生成MD5值
'''
import zipfile
import os
import shutil
import time
import hashlib

file_dir= r"C:\Users\august\Desktop\新建文件夾 (3)"
slice1 = slice(0,2)     #取2級文件夾
ll_test = []            #存放解壓好的各層子目錄    [['release'], ['HotfixRoot'], ['Gamei'], ['2.90'], ['Iphone'], []]

def Get_address(file_dir):  #獲取每個zip文件的絕對地址
    list_1 = []
    for root, dirs, files in os.walk(file_dir):
        for fn in files:
            if fn.endswith(".zip"):
                list_1.append(file_dir+os.sep+fn)
    return list_1


def un_zip(file_name):   #解壓zip文件
    """unzip zip file"""
    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()
    return (file_name +'_files')


#找到解壓的目錄
def  func(dir):
    list_1 = []
    for root, dirs, files in os.walk(dir):
        list_1.append(dirs)
    return  os.path.join(file_dir,list_1[0][0])

def mk_dir(dir):        #創建slice1層文件夾
    for root, dirs, files in os.walk(dir):
        ll_test.append(dirs)
    test1 = ''
    for i in ll_test[slice1]:
        test1 = os.path.join(test1,i[0])
    dir_name = test1  + '\\'
    return  dir_name

def copytree(src, dst, symlinks=False, ignore=None):   #合並文件
    for item in os.listdir(src):
        s = os.path.join(src, item)
        d = os.path.join(dst, item)
        if os.path.isdir(s):
            shutil.copytree(s, d, symlinks, ignore)
        else:
            shutil.copy2(s, d)

def rm_dirs(path):                                  #刪除目錄
    ls = os.listdir(path)
    for i in ls:
        c_path = os.path.join(path,i)
        if os.path.isdir(c_path):
            if shutil.rmtree(c_path) == None:
                print ('刪除成功')

def archive_file_zip(source_dir, output_filename):   #打包成zip包
    zipf = zipfile.ZipFile(output_filename, 'w')
    pre_len = len(os.path.dirname(source_dir))
    for parent, dirnames, filenames in os.walk(source_dir):
        for filename in filenames:
            pathfile = os.path.join(parent, filename)
            arcname = pathfile[pre_len:].strip(os.path.sep)
            zipf.write(pathfile, arcname)
    zipf.close()

def GetFileMd5(filename):       #產生MD5值
    if not os.path.isfile(filename):
        return
    myhash = hashlib.md5()
    f = open(filename,'rb')
    while True:
        b = f.read(1024)
        if not b :
            break
        myhash.update(b)
    f.close()
    return myhash.hexdigest()

if __name__ =="__main__":
    rm_dirs(file_dir)

    l_list = []
    for i in Get_address(file_dir):
        old_filename = un_zip(i)
        l_list.append(old_filename)

    ll = mk_dir(func(file_dir))         #創建slice1層文件夾

    for i in l_list:
        copytree(i+'\\'+ll,file_dir+'\\'+ll)

    now_time = time.strftime("%Y_%m_%d_%H_%M",time.localtime())   #時間

    file_dir_zip = ll.split(os.sep)[0]
    file_name = 'kitty_client_CDN_'+now_time+'.zip'
    archive_file_zip(os.path.join(file_dir,file_dir_zip),os.path.join(file_dir,file_name))
    print(file_name,'MD5值為:',GetFileMd5(os.path.join(file_dir,file_name)))

  

刪除成功
刪除成功
刪除成功
kitty_client_CDN_2018_05_29_20_17.zip MD5值為: f2409e4f802eb82a1fd118ca6b76b866

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM