python zipFile库的简单使用

由于工作需要,我们经常需要压缩,解压缩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()

注意 以上办法无法压缩空文件夹,空文件夹可以使用subfolders和当前目录拼接,同理可实现

你可能感兴趣的:(python zipFile库的简单使用)