当我们选择使用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