当我们选择使用Python来进行Linux系统管理,那么就免不了会在Python代码中对压缩包进行处理,包括创建压缩包、解压、获取压缩包中的文件列表等

tarfile

Python的tarfile标准库提供了tar命令提供的功能,我们可以使用它创建一个压缩或非压缩的tar包

tarfile最常用的函数:

  getnames: 获取tar包中的文件列表

    extract: 提取单个文件

  extractall: 提取所有文件

1、读取tar包

这个例子中,我们首先导入tarfile库,然后使用默认的读模式打开tar包。tarfile.open函数会返回一TarFile的对象,用这个对象表示当前打开的tar包,我们可以通过这个对象的方法操作和读取tar包的内容。如下:通过TarFile对象的getmembers 方法获取了tar包中的文件列表

import tarfile
with tarfile.open('heboan.tar') as t:
for member_info in t.getmembers():
print(member_info.name)

 2、创建tar包

创建一个tar包,所以以写模式打开tar包并得到一个TarfFile对象,然后使用TarFile对象的方法将README.txt文件添加到tar包中。

import tarfile
with tarfile.open('heboan.tar', 'w') as out:
out.add('README.txt')

 3、使用tarfile库读取与创建压缩包

前面我们创建和读取的是一个没有经过压缩的tar包。一般情况下,我们创建一个tar包的时候都会使用压缩算法进行压缩,以减少数据传输的带宽和磁盘的存储空间。

#读取一个用gzip算法压缩的tar包
with tarfile.open('tardile_add.tar', mode='r:gz') as out: #创建一个用bzip2算法压缩的tar包
with tarfile.open('tarfile_add.tar', mode='w:bz2') as out:

zipfile

大部分情况下,我们在Linux下使用gzip或gzip2进行压缩,在Windows下使用zip进行压缩

1、读取zip文件

ZipFile的常用方法:

  namelist: 返回zip文件中包含的所有文件和文件夹的字符串列表

  extract:从zip文件中提取单个文件

  extractall: 从zip文件中提取所有文件

import zipfile

example_zip = zipfile.ZipFile('heboan.zip')
print(example_zip.namelist())

2、创建zipfile

import zipfile

newzip = zipfile.ZipFile('new.zip', 'w')
newzip.write('spam.txt')
newzip.close()
import zipfile

f = zipfile.ZipFile('temp.zip')
#把所有有可能的密码保存到一个密码文件中,然后读取这个文件中的密码进程尝试破解
with open('passwords.txt') as pf:
for line in pf:
try:
f.extractall(pwd=line.strip())
print('password is {}'.format(line.strip()))
except:
pass

暴力破解zip压缩包的密码

shutil

shutil模块是高层次的文件接口,除了包含文件和目录的操作函数以外,还包含了压缩创建和压缩。

shutil支持的格式可以通过get_archive_formats函数获取,如下

In [1]: import shutil

In [2]: shutil.get_archive_formats()
Out[2]:
[('bztar', "bzip2'ed tar-file"),
('gztar', "gzip'ed tar-file"),
('tar', 'uncompressed tar file'),
('zip', 'ZIP file')]

1、shutil创建压缩包

import shutil

shutil.make_archive('/root/tmp/tools', 'gztar', '/root/tools')

#第一个参数是压缩的文件名
#第二个参数是压缩的格式
#第三个参数是压缩的目录 最后压缩的文件是: /root/tmp/tools.tar.gz

2、在python3中shutil解压压缩包

在python2中,shutil模块仅包含了创建压缩包的函数,并没有解压的函数。在python3找那个,shutil模块包含了一个与make_archive一样好用的解压函数,即unpack_archive

import shutil

shutil.unpack.archive('tools.tar.gz')

tarfile/zipfile/shutil的更多相关文章

  1. 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)

    [转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...

  2. Python之文件与目录操作(os、zipfile、tarfile、shutil)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

  3. python 归档tarfile,zipfile学习

    一.tarfile 用法: tarfile.open(cls, name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)  返回一个Tar ...

  4. 第二十天 模块 sys os os下path settings random shuit

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version 获取Pythonn解释程 ...

  5. Python开发【第六篇】:面向对象

    configparser模块 configparser用于处理特定格式的文件,其本质是利用open来操作文件. 文件a.txt [section1] k1 = 123 k2:v2   [section ...

  6. python各种模块,迭代器,生成器

    从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...

  7. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  8. python 阿狸的进阶之路(6)

    常用模块 json # 序列化 #将内存的数据存到硬盘中,中间的格式,可以被多种语言识别,跨平台交互数据 #json 可以将字典之类的数据类型存到字典中 import json dic = {&quo ...

  9. python学习 day19 configparser模块 os模块 subprocess模块

    上周五回顾 logging 用于记录日志 四种核心角色: 生成器Logger 过滤器Filter 处理器Handler 格式化处理器 Formatter logging.info.debug 使用默认 ...

随机推荐

  1. 【Luogu】P3927 SAC E#1 - 一道中档题 Factorial

    [题目]洛谷10月月赛R1 提高组 [题意]求n!在k进制下末尾0的个数,n<=1e18,k<=1e16. [题解]考虑10进制末尾0要考虑2和5,推广到k进制则将k分解质因数. 每个质因 ...

  2. .NET FrameWork 中的 CTS

    CTS:Common Type System 通用类型系统. 1.不仅可以把C#编译成.Net IL,还支持Basic.Python.Ruby等语言,甚至还支持Java.不同语言中的数据类型定义是不一 ...

  3. 详解JS中Number()、parseInt()和parseFloat()的区别

    三者的作用: Number(): 可以用于任何数据类型转换成数值: parseInt().parseFloat(): 专门用于把字符串转换成数值: 一.Number( ): (1)如果是Boolean ...

  4. Xutils使用详解

    刚开始的时候,在 GitHub 上面出现了一款强大的开源框架叫 xUtils,里面包含了很多实用的android工具,并且支持大文件上传,更全面的 http 请求协议支持(10种谓词),拥有更加灵活的 ...

  5. Android中的异常情况

    1.setText()方法中,如果参数是int类型,Android会把它当做是一个id查找,报以下异常,因此解决办法就是将参数转化为String类型 如:setText(num) è setText( ...

  6. FJOI游记(日记向 不定期更新)

    emmmm说实话只是突发奇想开个blog记录记录自己的内心想法罢了.. 2017/12/22:刷了一周的计算几何..刷的死去活来..结果还是被D惨了...譬如都不会考,要考我都不会什么的...感觉内心 ...

  7. 算法题之Median of Two Sorted Arrays

    这道题是LeetCode上的题目,难度级别为5,刚开始做没有找到好的思路,以为是自己智商比较低,后来发现确实也比较低... 题目: There are two sorted arrays nums1  ...

  8. xtraTabControl学习

    winform 首先是动态添加page面,并且在page页面上添加一个form窗体 DevExpress.XtraTab.XtraTabPage page = new DevExpress.XtraT ...

  9. C语言比较巧妙的字符串分割程序

    在解析字符串时,能够解析的给出每个字符串的长度.内容.以及每个字符串的第一个字符的地址. short i; ; //切割之后的字符串的个数 ,ItemLen[],Idx[], ThCommandLen ...

  10. POJ 1733 Parity game(带权并查集)

    题目链接:http://poj.org/problem?id=1733 题目大意:给你m条信息,每条信息告诉你区间l~r的1的个数是奇数还是偶数,如果后面出现信息跟前面矛盾则这条信息是错误的,问在第一 ...