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

猜你喜欢

转载自blog.csdn.net/weixin_41822224/article/details/106440964