看百度网盘我们会发现这么一个需求,新建一个文件夹,然后向文件夹中上传文件,点击文件夹可以直接下载,下载的是一个压缩文件,将文件夹中所有文件全部打包了下载下来。

在python中,我们要做文件打包下载,需要用到模块 zipfile

一、python自带zipfile 模块用来读写压缩文件(可处理除了zip类型之类,还可以处理rat,war,jar等类型)

  zipfile常见模考和方法:

  1、is_zipfile:判断是否路径是压缩文件

    zipfile.is_zipfile(filePath)

  

  2、ZipFile

    zf = zipfile.ZipFile(path, mode, zipfile.compression, allowZip64)

      path:压缩文件路径

      mode:文件打开模式--> r:读;w:写;a:添加

      compression:zipfile用什么压缩方式

        ZIP_STORE:默认方式,只是存储模式,不压缩

        ZIP_DEFLATED:压缩

      allowZip64:当压缩文件大于2G时,需要设置为True。

  3、ZipFile对象的方法:

    1)zf.infolist()

      返回一个list列表,内容是zip文件中子文件的ZipInfo对象。

      包含的字段有:文件名,压缩方式,文件权限模式(读写),文件大小等

      

  

    2)zf.getinfo(name)

      获取压缩文件中某个具体的文件的信息,name:压缩文件中的文件名

    3)zf.namelist()

      获取压缩文件在中所有文件名称列表

    4)zf.printdir()

      打印出压缩文件中所有文件信息

  

    5)zf.write(filename,actname)

      将文件添加到压缩文件中。

      filename:要添加到压缩文件中的文件路径

      actname:添加到压缩文件中的保存的文件名称

      如下:

        

      结果如下:

        

    6)zf.read(filename [, pwd])

      获取压缩文件内指定文件的二进制数据。

  要压缩某路径path下的所有文件及文件夹,实现过程如下:

  import zipfile

  import os

  def ZipFile(path, destPath):

    try:

      zf = zipfile.ZipFile(destPath, "w", zipfile.ZIP_DEFLATED)

      for dirpath,dirnames,filenames in os.walk(path):

        fpath = dirpath.replace(path, "")  # 将当前目录替换为空,即以当前目录为相对目录,如果当前目录下面还存在文件夹,则fpath为 【/子目录】

        fpath = fpath and fpath + os.sep or ""

        for file in filenames:

          zf.write(os.path.join(dirpath, file), fpath+file)

      zf.close()

    except Exception as e:

      print(e)

  解压:

   1、解压压缩文件中的某个特定文件:

    zf.extract(members,path)

 

   2、解压全部文件到指定路径

    zf.extractall(path)

二、tarfile

  Linux上常用的tar类型不被zipfile支持,所以要处理这种常用的压缩文件,需要用到另一个模块tarfile来处理。

  和zipfile一样,也有以下方法:

  is_tarfile(filename):检查是否是有效的tar文件

  tarObj = open(name[,mode]):打开文件

  tarObj对象包含以下方法和属性:

    .add(path[,file]):path是文件路径,file是想要在压缩文件中的路径,如果不写的话,压缩文件会从根目录开始压缩

    .close():操作完成,一定要记得关闭文件

    .extract(filepath[, path]):将压缩文件中的某个文件解压到指定目录

    .extractfile(filepath):将压缩文件中的某个文件提取出来,返回值是一个文件对象,可以通过read,write等方法操作

    .ignore_zeros:若这一属性设置为True,读取tar包时会跳过空快;如果设置为False,则空快表示tar包结束。这个属性的设置有利于读取损坏的tar包

    .list():类似于zipfile的printdir(),但是list()列出的信息更加详细,如果不需要这么详细,可以加上参数False

    .getmembers():返回一个列表,包含所有压缩文件信息。

  

  import tarfile

  import os

  def compress_files(tarpath,filepath):

    with tarfile.open(tarpath, "w") as tar:

      if os.path.isfile(filepath) :

        tar.add(filename)

      else:

        for dirpath, paths, files in os.walk(tarpath):

          fpath = dirpath.replace(tarpath, "")

          fpath = fpath and fpath + os.sep or ""

          for file in files:

            tar.add(os.path.join(dirpath, file), fpath+file)

    

python 打包下载 zipfile & tarfile的更多相关文章

  1. flask BytesIO() 多个文件打包下载 zipfile

    使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间. 后引入BytesIO将文件写入到内存中然后下载: def dl_pla ...

  2. Python第二十天 shutil 模块 zipfile tarfile 模块

    Python第二十天  shutil 模块  zipfile   tarfile 模块 os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...

  3. Python的压缩文件处理 zipfile & tarfile

    本文从以下两个方面, 阐述Python的压缩文件处理方式: 一. zipfile 二. tarfile 一. zipfile 虽然叫zipfile,但是除了zip之外,rar,war,jar这些压缩( ...

  4. Python打包文件夹的方法小结(zip,tar,tar.gz等)

    本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...

  5. python版本下载时时,官方目录web-based与executable和embeddable 的区别

    背景:安装python时不知道选择哪个版本以及他们之间的意思. 1.X86和X86-64的区别:系統是32 bit 的版本还是 64bit 的 2.web-based ,executable , em ...

  6. ASP.NET五步打包下载Zip文件

    本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...

  7. python打包成exe

    目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...

  8. ASP.NET多文件批量打包下载

    在对多文件打包中用到了 DotNetZip 的方法来实现对多文件压缩打包.需要到http://dotnetzip.codeplex.com/处下载该文件,然后引用即可. Default.aspx: & ...

  9. 反编译python打包的exe文件

    目录 1.前言 2.使用环境 3.还原过程 4.号外 5.exe文件和所用到的反编译工具 6.参考 7.去签名(补漏) 前言 拿到了利用驱动人生进行传播的病毒样本,发现是python打包成的exe文件 ...

随机推荐

  1. Linux 防火墙

    目录 iptables配置 1. iptables 控制类型 2. 链表规则 3. iptables表 CentOS和RedHat 6.x CentOS和RedHat 7.x ufw ubuntu u ...

  2. 将DataTable中的数据一次性提交到数据库中

    实现功能的核心代码 SqlConnection destinationConnection = new SqlConnection(connectionString);destinationConne ...

  3. gif软件(ShareX)

    介绍 官网:https://getsharex.com/ 开源,免费的一款软件,录制GIF功能简单,按下快捷键,选取指定的区域即可进行录制,录制完成后的文件默认存放在个人文件夹,整个过程几乎几打断你的 ...

  4. python 实现网页 自动登录

    完整代码: 1 from apscheduler.schedulers.blocking import BlockingScheduler 2 from selenium import webdriv ...

  5. MacOS远程Windows提示:远程桌面连接无法验证您希望连接的计算机的身份

    解决方法: 1.在Windows端,运行输入 “gpedit.msc”,打开本地组策略编辑器 2.依次打开[计算机配置]→[管理模板]→[windows组件]→[远程桌面服务]→[远程桌面会话主机]→ ...

  6. Welcom to Swift

    1.第一个程序 import Foundation println(“hello world”) 2.常用数据类型 int/UInt/Double/Float/Bool/String/Array/Di ...

  7. Sudoku 小项目

    Sudoku 小项目 - 软工第二次作业 Part 1 · 项目相关 Github 地址: https://github.com/TheSkyFucker/Sudoku 项目的更多信息以及所有开发文档 ...

  8. 【递推】ZSC1074: 数学、阿牛的EOF牛肉串

    Description 今年的ACM暑期集训队一共有18人,分为6支队伍.其中有一个叫做EOF的队伍,由04级的阿牛.XC以及05级的COY组成.在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点 ...

  9. 【Linux基础】VI 编辑器基本使用方法

    vi编辑器是所有Unix及Linux系统下标准的编辑器.对Unix及Linux系统的任何版本,vi编辑器是完全相同的,它是Linux中最基本的文本编辑器. 第一章vi的三种模式 第二章vi文本编辑器 ...

  10. keepalived 安装篇-个人实践-编译安装

    官网地址:http://www.keepalived.org/官网文档:http://www.keepalived.org/documentation.html Keepalived的作用是检测服务器 ...