感觉使用Python压缩是不是更方便点儿啊,现在都魔怔了,就用"ipython"替代命令行了都(哈哈哈哈)
tarfile:
tarfile不得不说真的很好用,感觉比“Linux”上的“tar”命令好用(不过我还是很热爱Linux的,嘻嘻.)
Python的tarfile标准库提供了tar命令提供的功能,我们可以使用它来创建或读取一个tar文件;
1. 创建tar包
In [1] import tarfile, os In [2] with tarfile.open('new.tar','w') as f: ...: for file in os.listdir('.'): ...: f.add(file)
2. 读取tar包(查看tar包中文件)
In [3]: with tarfile.open('test.tar') as out: ...: for name in out.getnames(): ...: print(name)
2.2 读取tar包(打开tar包)
In [4]: with tarfile.open('test.tar') as out: ...: out.extractall()
3. 创建压缩包(gzip)
tarfile不支持创建zip格式的压缩包,所以有了zipfile这个模块,这个都看习惯吧,其实我比较习惯用gzip;
1. 创建一个用gzip算法压缩的tar包
In [4]: with tarfile.open('dir1.tar.gz','w:gz') as f: ...: f.add('dir1') # 图中为dir1的目录结构,自动将子目录及子目录下的所有文件都打进了gzip包中(这个非常好)
![](https://img2020.cnblogs.com/blog/1718150/202005/1718150-20200514131434763-595690154.png)
2. 读取一个用gzip算法压缩的tar包
a) # 获取压缩包中的文件名及绝对路径
In [5]: with tarfile.open('dir1.tar.gz','r:gz') as out: ...: for name in out.getnames(): ...: print(name)
![](https://img2020.cnblogs.com/blog/1718150/202005/1718150-20200514132113832-984127681.png)
b) # 解压gzip压缩包
In [6]: with tarfile.open('dir1.tar.gz','r:gz') as out:
...: out.extractall()
zipfile:
当我们要将文件或目录压缩为zip格式的时候或我们要讲zip格式的文件解压的时候需要用到zipfile模块
1.创建zip文件
In [7]: import zipfile ...: newzip = zipfile.ZipFile('new.zip','w') ...: newzip.write('a.txt') ...: newzip.close()
2. 读取zip文件(展示zip文件中的文件列表)
In [7]: newzip = zipfile.ZipFile('new.zip') ...: newzip.namelist()
3.读取zip文件(解压)
In [7]: newzip = zipfile.ZipFile('new.zip') ...: newzip.extractall()
案例:压缩/root目录下的所有文件(包括子目录及子目录下的文件)
zipfile有一种情况就是如果被压缩的目标是一个目录,且这个目录下还有子目录,同时也要压缩子目录的文件的情况下就需要与循环一起用,
默认不会主动压缩
#!/usr/bin/python3 import os, zipfile, sys def zip_file(zipname, dirs=[]): newzip = zipfile.ZipFile(zipname,'w') if os.path.isdir(dirs): for root,dirs,files in os.walk(dirs): for file in files: newzip.write(os.path.join(root,file)) print('compressing!') newzip.close() else: print("{0} is not directory.".format(dirs)) sys.exit(2) def main(): sys.argv.append("") zipname = sys.argv[1] dirs = sys.argv[2] print(zipname) zip_file(zipname,dirs) if __name__ == "__main__": main()