由于工作需要,我们经常需要压缩,解压缩zip文件。在python操作zip文件时,我们可以使用zipfile库。
操作前准备
zipfile库安装
zipfile 库为python内置库
zipfile库导入
import zipfile
读操作r
初试zipfile
import zipfile #导入zipfile模块
###默认只读模式打开r
myzip = zipfile.ZipFile('test.zip')
###返回文件名
print(myzip.filename)
###返回文件列表
print(myzip.namelist())
打开压缩包内文件
#打开proxy.txt文件
proxyfile = myzip.getinfo(r'qiushibaike/proxy.txt')
#返回文件大小
print(proxyfile.file_size)
print(proxyfile.volume)
print(proxyfile.compress_size)
print('压缩率{:.2f}'.format(proxyfile.file_size/proxyfile.compress_size))
#读取proxy.txt
a = myzip.read(r'qiushibaike/proxy.txt').decode('utf-8')
print(a)
#打开方法2
b = myzip.open(proxyfile)
print(b.read().decode('utf-8'))
b.close()
解压文件到指定文件夹
#解压zip
myzip.extractall('./new/')#默认解压到当前文件夹
写操作
上面为zip文件的读操作,zip文件不仅可以读,还可以写
#新建zip文件 使用写操作w也可以使用追加a
myzip2 = zipfile.ZipFile('test3.zip','w')
#必须保证路径存在,将qiushibaike文件夹及其中的proxy.txt添加到压缩包中,使用压缩算法
#LZMA
myzip2.write('qiushibaike/proxy.txt',compress_type=zipfile.ZIP_LZMA)
#直接在压缩文件中新建文件,文件夹
myzip2.writestr('readme/read.txt',data='这是一个测试文件,新建成功',compress_type=zipfile.ZIP_DEFLATED)
上面的写操作只能操作单个文件,无法直接压缩目录
解决办法:使用os.walk()实现递归复制
print(os.walk(r'qiushibaike'))
for current_path,subfolders,filesname in os.walk(r'qiushibaike'):
#current_path 当前路径
#subfolders 当前路径下的文件夹
#filesname当前目录下的文件
print(current_path,subfolders,filesname)
for file in filesname:
myzip2.write(os.path.join(current_path,file),compress_type=zipfile.ZIP_LZMA)
#关闭
myzip2.close()