zoukankan      html  css  js  c++  java
  • python 打包下载 zipfile & tarfile

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

    在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)

        

  • 相关阅读:
    JAVA 网格布局管理器
    JAVA 流式布局管理器
    JAVA 边界布局管理器
    JAVA 图形界面 JFrame容器
    MySQL联合查询语法内联、左联、右联、全联
    ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
    ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
    MVC过滤器详解
    Dapper的基本使用
    JQuery fullcalender文档
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/9931458.html
Copyright © 2011-2022 走看看