目录
1 使用python压缩,解压缩
1.1 tarfile
1.1.1 使用tarfile对文件压缩
1.1.2 使用 tatrfile对文件解压
1.1.3 读写tar文档
1.2 zip
1.2.1 读取ZIP文件信息
1.2.2 从 ZIP 文件中解压缩
1.2.3 创建和添加到 ZIP 文件
python自带的tarfile文件,可以方便读取tar归档文件,还可以使用gzip和bz2压缩归档文件为tar.gz和tar.bz2;
1 使用python压缩,解压缩
python可以解压缩五种文件:.gz, .tar, .tgz, .zip, .rar
解释:
gz: 即gzip,通常只能压缩一个文件,与tar结合可以实现先打包,再压缩;
tar: linux下的打包工具,只打包,不压缩;
tgz: 即tar.gz, 先使用tar打包,再使用gz压缩得到的文件;
zip: 不同与gzip,可以打包压缩多个文件,不过分别压缩文件,压缩率低于tar;
rar: 打包压缩文件, 最初用于DOS, 基于windows操作系统,压缩率比 zip高,但速度慢,随机访问速度也慢;
1.1 tarfile
1.1.1 使用tarfile对文件压缩
tarfile是python自带的包
- >>> import tarfile
- >>> tar = tarfile.open('/Users/qiaoboyu/Desktop/alldata.tar.gz',"w:gz")
- >>> import os
- >>> for root, dir, files in os.walk('/Users/qiaoboyu/Desktop/alldata'):
- ... for file in files:
- ... fullpath = os.path.join(root, file) # 拼接路径
- ... tar.add(fullpath) # 添加压缩文件
压缩后文件截图:
1.1.2 使用 tatrfile对文件解压
- >>> tar_path = '/Users/qiaoboyu/Desktop/alldata.tar.gz'
-
- >>> target_path = '/Users/qiaoboyu/Desktop/data1'
- >>> tar = tarfile.open(tar_path,"r:gz")
- >>> file_names = tar.getnames()
- >>> for file_name in file_names:
- ... tar.extract(file_name,target_path)
- ...
- >>> tar.close()
解压后文件截图:
或者:
- >>> dataset_folder_path = '/Users/qiaoboyu/Desktop/data2'
- >>> with tarfile.open('/Users/qiaoboyu/Desktop/alldata.tar.gz') as tar:
- ... tar.extractall(dataset_folder_path)
- ... tar.close()
解压后截图:
1.1.3 读写tar文档
代码:
- import tarfile
-
- # 获取tar文件里面所有的文件名
- with tarfile.open('tarDir.tar', 'r') as t:
- print(t.getnames())
-
- # 获取tar文件里面所有的文件名、大小、模式等
- import tarfile
- import time
-
- with tarfile.open('tarDir.tar', 'r') as t:
- for member_info in t.getmembers():
- print(member_info.name)
- print('修改时间:', time.ctime(member_info.mtime))
- print('模式:', member_info.mode)
- print('类型:', member_info.type)
- print('大小:', member_info.size, 'bytes')
1.2 zip
1.2.1 读取ZIP文件信息
要读取ZIP文件的内容,首先必须创建一个ZipFile对象(代码中的zfile.zip)。ZipFile对象在概念上与File对象相似;
要创建一个 ZipFile 对象,就调用 zipfile.ZipFile()函数,向它传入一个字符串,表示.zip 文件的文件名;
zipfile 是 Python 模块的名称,ZipFile()是函数的名称;
ZipFile 对象表示 整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息;
- import zipfile
-
- # 传入压缩文件zfile.zip获取相关信息
- zip_file = zipfile.ZipFile('zfile.zip')
-
- # 获取压缩文件中的内容 ZipFile 对象有一个 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夹 的字符串的列表
- f_content = zip_file.namelist()
-
- # 压缩前的大小 这些字符串可以传递给 ZipFile 对象的 getinfo()方法,返回一个关于特定文件的 ZipInfo 对象
- # ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size,它们分别表示原来文件大小和压缩后文件大小
- f_size = zip_file.getinfo('zfile/a.txt').file_size
-
- # 压缩后的大小
- c_size = zip_file.getinfo('zfile/a.txt').compress_size
1.2.2 从 ZIP 文件中解压缩
ZipFile 对象的 extractall()方法从 ZIP 文件中解压缩所有文件和文件夹,放到当前工作目录中;
- import zipfile
-
- zip_file = zipfile.ZipFile('zfile.zip')
- # 解压 可以向 extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作 目录
- # 如果传递给 extractall()方法的文件夹不存在,它会被创建
- zip_extract = zip_file.extractall()
- zip_extract.close()
1.2.3 创建和添加到 ZIP 文件
创建自己的压缩 ZIP 文件,必须以“写模式”打开 ZipFile 对象,即传入’w’ 作为第二个参数(这类似于向 open()函数传入’w’,以写模式打开一个文本文件)
向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指的文件;