[PYTHON]通过python对文件夹里面的文件进行批量压缩

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Date     : 2020-10-13
# Author   : 物奕
# Version  : 1.0

import zipfile
import os
import time
import sys


#需要压缩的文件夹
start_dir = r"C:\Users\hwu\Downloads\01_Geely\07-SW test log\03-Jou"

#存放压缩文件的文件夹
target_dir = r"C:\Users\hwu\Downloads\01_Geely\07-SW test log\03-Jou"

# 创建改文件夹是为了存放压缩文件,可不创建
# 0s.sep相当于路径下的\
# today = target_dir + os.sep + time.strftime('%y%m%d')

#创建子目录
# os.mkdir(today)

# if not os.path.exists(today):
#     os.mkdir(today)
#    print('Successfully created directory', today)

    
#定义一个函数,递归读取absDir文件夹中所有文件,并塞进zipFile文件中。参数absDir表示文件夹的绝对路径。
def writeAllFileToZip(absDir,zipFile):
    for f in os.listdir(absDir):
        absFile=os.path.join(absDir,f) #子文件的绝对路径
        if os.path.isdir(absFile): #判断是文件夹,继续深度读取。
            #relFile=absFile[len(os.getcwd())+1:] #改成相对路径,否则解压zip是/User/xxx开头的文件。
            zipFile.write(absFile,f) #在zip文件中创建文件夹
            writeAllFileToZip(absFile,zipFile) #递归操作
        else: #判断是普通文件,直接写到zip文件中。
            #relFile=absFile[len(os.getcwd())+1:] #改成相对路径
            zipFile.write(absFile,f)
    return
    

os.listdir(start_dir)

for item in os.listdir(start_dir):

    file_news = target_dir + os.sep + item + '.zip'
    # print(file_news)

    zipFilePath=os.path.join(start_dir,file_news) 
    #先定义zip文件绝对路径。sys.path[0]获取的是脚本所在绝对目录。
    #因为zip文件存放在脚本同级目录,所以直接拼接得到zip文件的绝对路径。

    zipFile=zipfile.ZipFile(zipFilePath,"w",zipfile.ZIP_DEFLATED) 
    #创建空的zip文件(ZipFile类型)。参数w表示写模式。zipfile.ZIP_DEFLATE表示需要压缩,文件会变小。ZIP_STORED是单纯的复制,文件大小没变。
    # print(zipFile)
    absDir=os.path.join(start_dir,item) 
    #要压缩的文件夹绝对路径。
    # print(absDir)

    

    writeAllFileToZip(absDir,zipFile) #开始压缩。如果当前工作目录跟脚本所在目录一样,直接运行这个函数。
    #执行这条压缩命令前,要保证当前工作目录是脚本所在目录(absDir的父级目录)。否则会报找不到文件的错误。
    # print("压缩成功")


参考文档:

https://www.zhaokeli.com/article/8154.html

https://blog.csdn.net/devnn/article/details/93486785

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值