python 壓縮文件 zip

def FilesToZip(fps, zip_fp, delete=False):
    ''' 多文件打包成zip
    :param fps:   [r'C:\1.txt', r'C:\2.txt', r'C:\3.txt'] 文件全路徑的list
    :param zip_fp:  r'C:\files.zip'
    :param delete:  True    刪除原文件
    :return:
    '''
    if len(fps)==0: raise Exception('參數 fps 不能爲空')
    if not zip_fp.endswith("zip"): raise Exception('輸出zip路徑 文件格式不對')
    zipf = zipfile.ZipFile(zip_fp, "w") #在路徑中創建一個zip對象
    for fp in fps:
        fn = os.path.basename(fp)
        zipf.write(fp, fn) #第一個參數爲該文件的全路徑;第二個參數爲文件在zip中的相對路徑
    zipf.close()    #關閉文件
    if delete:      #刪除原文件
        for fp in fps:
            os.remove(fp)
    print('%s ===> ok'%zip_fp)

if __name__ == '__main__':
    sourcePath = 'D:\\park4nightData\\allImgs\\'
    outPutPath = 'D:\\park4nightData\\allImgsZip\\'
    # for root, dirs, files in os.walk(sourcePath):
    #     sourcePathFiles = files
    sourcePathFiles = list(os.walk(sourcePath))[0][2]

    sourcePathFiles = [sourcePath+path for path in sourcePathFiles]
    totalFiles = len(sourcePathFiles)
    zip_num = 1
    while True:
        print('zip_num:',zip_num)
        zip_file_name = 'imgs-%s.zip'%zip_num  # 壓縮後的zip文件名
        zip_file_path = outPutPath + zip_file_name

        files_path_list = sourcePathFiles[:5000]  # 一次打包5000個圖片
        sourcePathFiles = sourcePathFiles[5000:]

        if len(files_path_list) > 0:
            FilesToZip(files_path_list, zip_file_path)
            print('>>>>>>>>>>>> %s / %s' % (len(sourcePathFiles), totalFiles))
            zip_num += 1
        else:
            break
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章