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)
python 打包下载 zipfile & tarfile的更多相关文章
- flask BytesIO() 多个文件打包下载 zipfile
使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间. 后引入BytesIO将文件写入到内存中然后下载: def dl_pla ...
- Python第二十天 shutil 模块 zipfile tarfile 模块
Python第二十天 shutil 模块 zipfile tarfile 模块 os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...
- Python的压缩文件处理 zipfile & tarfile
本文从以下两个方面, 阐述Python的压缩文件处理方式: 一. zipfile 二. tarfile 一. zipfile 虽然叫zipfile,但是除了zip之外,rar,war,jar这些压缩( ...
- Python打包文件夹的方法小结(zip,tar,tar.gz等)
本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...
- python版本下载时时,官方目录web-based与executable和embeddable 的区别
背景:安装python时不知道选择哪个版本以及他们之间的意思. 1.X86和X86-64的区别:系統是32 bit 的版本还是 64bit 的 2.web-based ,executable , em ...
- ASP.NET五步打包下载Zip文件
本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...
- python打包成exe
目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...
- ASP.NET多文件批量打包下载
在对多文件打包中用到了 DotNetZip 的方法来实现对多文件压缩打包.需要到http://dotnetzip.codeplex.com/处下载该文件,然后引用即可. Default.aspx: & ...
- 反编译python打包的exe文件
目录 1.前言 2.使用环境 3.还原过程 4.号外 5.exe文件和所用到的反编译工具 6.参考 7.去签名(补漏) 前言 拿到了利用驱动人生进行传播的病毒样本,发现是python打包成的exe文件 ...
随机推荐
- MySQL常用命令(一)
(1)库的基础操作 查看已有库: show databases; 创建库(制定默认字符集): ccreate database 库名 default charset=utf8; 查看创建库的语句: s ...
- K-means算法的matlab程序
K-means算法的matlab程序 在“K-means算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 ...
- Vmware12安装centos系统详解
vmware12安装centos7系统详解 用虚拟机12安装centos7系统详细安装过程,后附centos7下载地址. 工具/原料 虚拟机12 centos7系统镜像 方法/步骤 1 1.百度搜索c ...
- 数据库的未来:ORM+LINQ+RX
数据库的未来:ORM+LINQ+RX 数据 操作 异步 ORM LINQ RX
- 设置ansible与windows连通性
1.确认powershell的版本,必须是3.0以上 $PSVersionTable.PSVersion 2.确认winrm是否开启命令:winrm quickconfig 3.在windows配置w ...
- display为inline-block的元素有内容和没有内容情况下高度不一致的问题
这两天发现一个问题,就是display为inline-block的元素有内容和没有内容情况下高度不一致,虽然不会出现元素中没内容的情况,但是我还是决定必须解决这个问题,可能我有一些轻微的强迫症. &l ...
- 阿里巴巴的26款超神Java开源项目,有时间阅读一下各个文档,增添一下知识广度
1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务的 ...
- P2360 地下城主(BFS)
感觉这道题还是蛮简单的,不过使使用了4个队列(其实只是一个)emmmmm,还是很好的 #include<iostream> #include<string> #include& ...
- Zookeeper系列一:Zookeeper介绍、Zookeeper安装配置、ZK Shell的使用
https://www.cnblogs.com/leeSmall/p/9563547.html 一.Zookeeper介绍 1. 介绍Zookeeper之前先来介绍一下分布式 1.1 分布式主要是下面 ...
- 在新建的python3环境下运行jupyter失败的原因
在deeplearning中再运行jupyter notebook就出现了错误: (deeplearning) userdeMBP:~ user$ jupyter notebook -bash: ju ...