python-对指定文件夹进行压缩

目的

首先,我试验了一下【1】的效果:

import os

from zipfile import ZipFile

def backupZip(folder): #这个函数只做文件夹打包的动作,不判断压缩包是否存在

zipfile_name = os.path.basename(folder) + '.zip' #压缩包和文件夹同名

with ZipFile(zipfile_name, 'w') as zfile: #以写入模式创建压缩包

for foldername, subfolders, files in os.walk(folder): #遍历文件夹

print('Adding files in ' + foldername +'...')

zfile.write(foldername)

for i in files:

zfile.write(os.path.join(foldername,i))

print('Adding ' + i)

print('Done.')

def folder2zip(folder): #文件夹打包为zip的函数

zipfile_name = os.path.basename(folder) + '.zip'

if not os.path.exists(zipfile_name): #检查压缩包是否存在,如果已存在则询问是否继续

backupZip(folder)

else:

response = input("Zipfile exists. Coutinue?('q' for quit): ")

if response != 'q':

backupZip(folder)

但是当我使用绝对路径 folder2zip("C:/Users/10073\Desktop/knn") 测试效果时,其效果却是这样的:

直接双击打开 knn.zip 结果却是这样的,而我想要的是打开zip文件出现的直接是该文件的内容。那么就需要改写代码了。

首先我们得了解ZipFile.write函数的用法。

ZipFile.write()的简单介绍

ZipFile.write(filename[, arcname[, compress_type]])

其中:filename为文件路径,arcname为添加到zip文档之后保存的名称,参数compress_type表示压缩方法,它的值可以是zipfile.ZIP_STORED或zipfile.ZIP_DEFLATED

示例代码:

import zipfile,os

fileName = r"E:\\WORK\\js\\2.html"

zipName = r"E:\\WORK\\js\\2.zip"

zf = zipfile.ZipFile(zipName, 'w')

zf.write(fileName,'3.html')#fileName-文件名,3.html-压缩后的文件名称

zf.close()

要想达到我的目的,需要一些递归操作。

思路与代码编写

首先,由于要进行递归写入,所以我把生成zipfile实例这一步放到了解压函数外面,并把它作为了解压函数的参数。(注意我的第5行和第10行)

def folder2zip(folder): #文件夹打包为zip的函数

zipfile_name = os.path.basename(folder) + '.zip'

if not os.path.exists(zipfile_name): #检查压缩包是否存在,如果已存在则询问是否继续

zfile=ZipFile(zipfile_name,'w')

myOwnZip(zfile,folder)

else:

response = input("Zipfile exists. Coutinue?('q' for quit): ")

if response != 'q':

zfile = ZipFile(zipfile_name, 'w')

myOwnZip(zfile,folder)

一开始我的 myOwnZip 函数是这样实现的:

def myOwnZip(zfile,folder):

print("folder:",folder)

fileList=os.listdir(folder)

for file in fileList:

if os.path.isfile(os.path.join(folder,file)): # 如果是文件

zfile.write(os.path.join(folder,file),file)

else:

zfile.write(os.path.join(folder,file),baseDir+"/"+file) # 创建文件夹

print("将文件夹",file,"添加到压缩包中")

myOwnZip(zfile,os.path.join(folder,file),file)

print('Done.')

但是这样会出现一个问题,就是不管是在第几层的文件都写在了同一级下(没能递归)。

也就是说如果一个文件存放在knn/test/mm.py,那么在zfile.write中的file也应该是knn/test/mm.py。但是在我们上述函数中,file输出为mm.py,所以zfile.write就直接把它放在第一层里了。

于是我又加了一个参数,basedir。

def myOwnZip(zfile,folder,baseDir=""):

print("folder:",folder)

print("baseDir:",baseDir)

fileList=os.listdir(folder)

for file in fileList:

if os.path.isfile(os.path.join(folder,file)): # 如果是文件

zfile.write(os.path.join(folder,file),os.path.join(baseDir,file))

else:

zfile.write(os.path.join(folder,file),baseDir+"/"+file) # 创建文件夹

print(baseDir+"/"+file)

print("将文件夹",file,"添加到压缩包中")

# baseFolderName=os.path.basename(folder)

myOwnZip(zfile,os.path.join(folder,file),baseDir=os.path.join(baseDir,file))

print('Done.')

这样就实现了递归压缩。

再接下来是,就是要实现把文件压缩到指定文件夹。这个思路就很简单了,我们把它压缩到当前目录后,再shutil.move到指定文件夹就行了。专业代写,扫码了解

参考资料

python中怎么压缩文件夹_python-对指定文件夹进行压缩相关推荐

  1. python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...

    C# 读取指定文件夹中的全部文件,并按规则生成SQL语句! 本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using S ...

  2. python保存文件到指定文件夹_python实现指定文件夹下的指定文件移动到指定位置...

    本文主要是写了一个将指定文件夹下的指定文件类型移动到指定位置,具体内容如下 # coding:utf-8 import os import shutil import sys reload(sys) ...

  3. python删除文件夹下文件夹_python删除指定文件夹下文件和文件夹的方法详解

    前记 python删除指定文件夹下的文件,是一个常用的功能.我找了不少地方,一直没有找到合适的模版,那只好自己倒腾一个比较实用的模版了. 基本模块 这里面会用到几个模块,一个是目录下所有文件的的函数: ...

  4. python指定文件路径_python实现指定文件夹下的指定文件移动到指定位置

    # coding:utf-8 import os import shutil import sys reload(sys) sys.setdefaultencoding('utf8') # print ...

  5. python生成xml文件工具_Python根据指定文件生成XML的方法

    因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...

  6. python中表头格式错误导入_python读csv文件时指定行为表头或无表头的方法

    pd.read_csv()方法中header参数,默认为0,标签为0(即第1行)的行为表头.若设置为-1,则无表头.示例如下: (1)不设置header参数(默认)时: df1 = pd.read_c ...

  7. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  8. python中msg是什么意思_python下载.msg文件的附件

    def get_attachments(file_name, path_name): """ 获取.msg文件内的附件 :param file_name: .msg文件路 ...

  9. python查找文件夹中的指定文件_python 递归搜索文件夹下的指定文件

    python 递归搜索文件夹下的指定文件 import os def look_in_directory(directory): """Loop through the ...

  10. PHP中使用ZipArchive扩展压缩整个文件夹和过滤指定文件

    压缩整个文件 代码如下(示例): $zip = new \ZipArchive();$filename = 'xxx.zip';//压缩文件名,自己命名if($zip->open($filena ...

最新文章

  1. 三国演义人物出场统计代码含义_实例2之《三国演义》人物出场统计
  2. 比特币现金仍然是一个比较好的投资
  3. html代码复制到asp中不一样了_迷你代码编程在线成语词典
  4. 难死金庸的考题(高中难度)
  5. 全渠道java b2b b2c o2o平台
  6. 计算机vfp程序设计题,2012年计算机级VFP程序设计基础习题及答案.doc
  7. split(v1,v2)用于把一个字符串分割成字符串数组
  8. oracle之三 自动任务调度
  9. 【Grasshopper基础1】怎样制作一个Grasshopper电池 / 二次开发基础
  10. rufus-3.2制作linux/Windows启动盘,附rufus.exe软件程序下载链接
  11. 《圈子圈套2》—— 读后总结
  12. 在线查看计算机配置,怎样查看电脑配置信息?
  13. Python练手项目:计算机自动还原魔方(1)顶部十字
  14. 以个性化为需求如何选择ITSM系统?
  15. vscode 使用 SDCC 开发 STM8
  16. PowerVR Series5 Architecture Guide for Developers
  17. 时势造英雄之策略模式
  18. 液晶电视英文linux使用教程,液晶电视如何使用 液晶电视正确使用方法介绍【详解】...
  19. 软件质量有什么特性?
  20. 支付宝当面付参数获取步骤,个人申请使用支付宝当面付

热门文章

  1. 第七章上机练习3 4
  2. 微信APP支付-JAVA
  3. ubuntu7.10下使用QQ聊天-wine+QQ2007安装设置方法
  4. 大数据与HDFS学习笔记
  5. 还不了解进程吗?就这一篇!
  6. dede标签:定义文件夹
  7. 安装监控系统zabbix
  8. Java简单学生信息管理系统
  9. “你画我猜”心理学分析
  10. swt java 内嵌ActiveX控件