tarfile/zipfile/shutil
当我们选择使用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的更多相关文章
- 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)
[转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...
- Python之文件与目录操作(os、zipfile、tarfile、shutil)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- python 归档tarfile,zipfile学习
一.tarfile 用法: tarfile.open(cls, name=None, mode='r', fileobj=None, bufsize=10240, **kwargs) 返回一个Tar ...
- 第二十天 模块 sys os os下path settings random shuit
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version 获取Pythonn解释程 ...
- Python开发【第六篇】:面向对象
configparser模块 configparser用于处理特定格式的文件,其本质是利用open来操作文件. 文件a.txt [section1] k1 = 123 k2:v2 [section ...
- python各种模块,迭代器,生成器
从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...
- python学习笔记_week5_模块
模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...
- python 阿狸的进阶之路(6)
常用模块 json # 序列化 #将内存的数据存到硬盘中,中间的格式,可以被多种语言识别,跨平台交互数据 #json 可以将字典之类的数据类型存到字典中 import json dic = {&quo ...
- python学习 day19 configparser模块 os模块 subprocess模块
上周五回顾 logging 用于记录日志 四种核心角色: 生成器Logger 过滤器Filter 处理器Handler 格式化处理器 Formatter logging.info.debug 使用默认 ...
随机推荐
- [Luogu 2261] CQOI2007 余数求和
[Luogu 2261] CQOI2007 余数求和 这一定是我迄今为止见过最短小精悍的省选题了,核心代码 \(4\) 行,总代码 \(12\) 行,堪比小凯的疑惑啊. 这题一看暴力很好打,然而 \( ...
- 「6月雅礼集训 2017 Day8」route
[题目大意] 给出平面上$n$个点,求一条连接$n$个点的不相交的路径,使得转换的方向符合所给长度为$n-2$的字符串. $n \leq 5000$ [题解] 考虑取凸包上一点,然后如果下一个是‘R' ...
- 【BZOJ】4530: [Bjoi2014]大融合
[题意]给定n个点的树,从无到有加边,过程中动态询问当前图某条边两端连通点数的乘积,n<=10^5. [算法]线段树合并+并查集 (||LCT(LCT维护子树信息 LCT维护子树信息(+启发式合 ...
- 【BZOJ】1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名
[题意]给定n头牛和m对大小关系,求最坏情况下至少还需要比较几对奶牛的大小(在未确定顺序的奶牛对中随机比较) [算法]floyd求传递闭包 [题解]可达说明大小已知,则不可达点对数量就是最少比较次数. ...
- 【洛谷 P2513】 [HAOI2009]逆序对数列(DP)
题目链接 这种求方案数的题一般都是\(dp\)吧. 注意到范围里\(k\)和\(n\)的范围一样大,\(k\)是完全可以更大的,到\(n\)的平方级别,所以这暗示了我们要把\(k\)写到状态里. \( ...
- js跨域上传文件 iframe
封装好的jq插件 (function () { var iframe = '<iframe name="jqUploadIframe" style="display ...
- [Leetcode Week16]Range Sum Query - Mutable
Range Sum Query - Mutable 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/range-sum-query-mutable/de ...
- Linux 入门记录:五、vi、vim 编辑器
一.vi.vim编辑器 vi 是一个命令行界面下的文本编辑工具,最早在 1976 年由 Bill Joy 开发.当时名字叫做 ex.vi 支持绝大多数操作系统(最早在类 Unix 操作系统的 BSD上 ...
- xtrabackup 安装、备份和恢复
xtrabackup 版本对应: 2.4 专针对 5.7 开发的,兼容 5.6, 5.5 2.3 针对 5.6 开发的,兼容5.5 2.2 针对5.5 开发的 安装包下载: wget https:// ...
- Sql Server 2014/2012/2008/2005 数据库还原出现 3154错误的解决办法
在Sql Server 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决,如果不行参照方法 ...