目录
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 就会压缩该路径所指的文件;