查看原文
其他

文件的压缩与解压库-zipfile、tarfile

大邓 大邓和他的Python 2019-04-26


标准库tarfile、zipfile,可以用来处理压缩文件,如gzip、bz2和lzma等。两者很类似,基本上学会一个库,另一个库也就会了。

一、zipfile库

1.1 压缩单个文件

import zipfile
import os

#将 “三体.txt” 压缩到 “三体.zip”中
with zipfile.ZipFile('三体.zip', 'w') as z:        #请注意这里写的是当前文件夹下的文件名    z.write('三体.txt')    z.write('test.txt')
#请注意这里写的是当前文件夹下的文件名 如果z.write('/A/三体.txt') 那么在“三体.zip”中会生成一个User文件夹。 如果z.write('/A/B/C/三体.txt') 打开“三体.zip”首先看到A,点进A发现B,打开B看到C,最后才看到"三体.txt"。像剥洋葱,玩俄罗斯套娃,

1.2 解压文件

with zipfile.ZipFile('三体.zip', 'r') as z:    # 查看压缩包中的文件列表    print(z.namelist())        # 查看压缩包中的第一个文件,相当于open(file).read()    #print(zip.read(z.namelist()[0]))    # 解压 “三体.zip”中的 “三体.txt”文件    z.extract('三体.txt')        # 解压全部    z.extractall()        # 解压,在当前文件夹下会出现一个名为"三体"的文件夹    z.extractall('三体')    

1.3 压缩某个目录下所有文件

先了解下os.walk()

os.walk() 方法用于通过在目录树中游走输出目录中的文件名。

返回的是三元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】组成的生成器。

import os

# top:随机游走的顶级目录参数。"."代表根目录
for root, dirs, files in os.walk(top = "."):    for name in files:        print(os.path.join(root, name))    #for name in dirs:        #print(os.path.join(root, name))
./.DS_Store ./tarfile学习.md ./tarfile学习.py ./test.txt ./三体.txt ./aa/.DS_Store ./aa/a.txt ./aa/b.txtimport os

for root, dirs, files in os.walk(top = "."):    #for name in files:        #print(os.path.join(root, name))    for name in dirs:        print(os.path.join(root, name))
./aa

有了上面的知识,我们就可以使用zipfile压缩某个目录下所有文件

def compress_file(zipfilename, dirname):    """    :param zipfilename: 压缩包名字    :param dirname:  要打包的目录    :return:    """        #如果dirname是文件名    if os.path.isfile(dirname):        with zipfile.ZipFile(zipfilename, 'w') as z:            z.write(dirname)

   #如果dirname是文件夹        else:        with zipfile.ZipFile(zipfilename, 'w') as z:            for root, dirs, files in os.walk(dirname):                for single_file in files:                    if single_file != zipfilename:                            filepath = os.path.join(root, single_file)                        #将dirname文件夹中的所有文件都压缩                        z.write(filepath)


# 执行函数
compress_file('a.zip', '.')      

1.4添加文件到已有的zip包中

跟上面的函数类似,只将函数内写入w改成追加a操作。

def addfile(zipfilename, dirname):    #如果dirname是文件名    if os.path.isfile(dirname):        #a:追加写入模式        with zipfile.ZipFile(zipfilename, 'a') as z:            z.write(dirname)                #如果dirname是文件夹    else:        with zipfile.ZipFile(zipfilename, 'a') as z:            for root, dirs, files in os.walk(dirname):                for single_file in files:                    if single_file != zipfilename:                        filepath = os.path.join(root, single_file)                        z.write(filepath)

addfile('三体.zip', '黑暗森林.txt')

1.5 查看压缩包中的文件

def viewfile(zipfilename):    #r:读取模式    filelist = []    with zipfile.ZipFile(zipfilename, 'r') as z:        filelist+=z.namelist()    return filelist

print(viewfile('三体.zip'))
['tarfile学习.md', 'zipfile学习.md', 'test.txt', '三体.txt', 'aa/a.txt', 'aa/b.txt']

二、TarFile

2.1 压缩文件

import tarfile
import os

with tarfile.open('三体.tar', 'w') as tar:    tar.add('三体.txt')

2.2解压文件

with tarfile.open('a.tar', 'r') as tar:    # 查看压缩包内含有的文件    print(tar.getmembers())          # 可选择解压某个文件      tar.extract('三体.txt')    # 解压全部    tar.extractall()          #将压缩包内的文件解压到”三体2“文件夹中      tar.extractall('三体2')  [<TarInfo '三体.txt' at 0x1023bf048>]

2.3 压缩某个目录下所有文件

基本上同zipfile

def compress_file(tarfilename, dirname):        if os.path.isfile(dirname):        with tarfile.open(tarfilename, 'w') as tar:            tar.add(dirname)    else:        with tarfile.open(tarfilename, 'w') as tar:            for root, dirs, files in os.walk(dirname):                for single_file in files:                    if single_file != tarfilename:                    filepath = os.path.join(root, single_file)                    tar.add(filepath)

compress_file('三体.tar', 'test.txt')compress_file('三体.tar', '.')

2.4 添加文件到已有的tar包中

def addfile(tarfilename, dirname):        if os.path.isfile(dirname):        with tarfile.open(tarfilename, 'a') as tar:            tar.add(dirname)    else:        with tarfile.open(tarfilename, 'a') as tar:            for root, dirs, files in os.walk(dirname):                for single_file in files:                    #if single_file != tarfilename:                    filepath = os.path.join(root, single_file)                    tar.add(filepath)

addfile('三体.tar', '黑暗森林.txt')


历史文章:

数据采集

selenium驱动器配置详解

icrawler:强大简单的图片爬虫库

抓取单博主的所有微博及其评论

爬虫神器PyQuery的使用方法

pyquery一些自定义的用法

【视频】猫途鹰网站评论数据抓取

【视频讲解】在scrapy框架中如何使用selenium?

【实战视频】使用scrapy写爬虫-爬知乎live

简易SQLite3数据库学习

【视频教程】对视频进行基本操作

【视频】抓包小练习-B站评论数据抓取

fake-useragent库:值得花2分钟学习的库

【视频】爬取饿了么平台上的门店信息

如何抓取视频资源-以头条视频为例

当爬虫遭遇验证码,怎么办

【视频】手把手教你抓美女~

【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”

【视频】快来get新技能--抓包+cookie,爬微博不再是梦

【视频教程】用python批量抓取简书用户信息

识别假货有绝招,就用python爬淘宝评论

用Python抓取百度地图里的店名,地址和联系方式

文本处理分析

gensim:用Word2Vec进行文本分析

Python NLP中的五大英雄

用SenticNet库做细粒度情感分析

如何对csv文件中的文本数据进行分析处理

复杂网络分析数据准备篇

文本分析之网络关系

用词云图解读“于欢案”

基于共现发现人物关系的python实现

用pyecharts制作词云图

RAKE:快速自动抽取关键词算法

对于中文,nltk能做哪些事情

图片数据处理

OpenCV:快速入门图片人脸识别

好玩的OpenCV:图片操作的基本知识(1)

好玩的OpenCV:图像操作的基本知识(2)

OpenCV:计算图片有多色

如何对数据进行各种排序?

其他

【视频】初学者必看:python环境配置

开扒皮自己微信的秘密

初识装饰器函数

计算运行时间-装饰器实现

花十分钟,给爱机安装个MongoDB

chardet库:轻松识别文件的编码格式

使用Python登录QQ邮箱发送QQ邮件

WTF Python: 开启你的懵逼模式

8行代码实现微信聊天机器人

WTF Python: 开启你的懵逼模式

WTF Python:开启懵逼模式第二弹

使用Python+OpenCV进行面部合成

十分钟学会用Flask发邮件


迅雷不给力,我DIY了个下载器


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存