python-zipfile

python-zipfile

zipfile 是python的一个内置模块,专门用于压缩文件和解压文件

常用方法

ZipFile(filename[,mode[,compression[,allowZip64]]])
import zipfile

file_path = "D:/test.zip"
file_path2 = "xxx"

"""这里的第二个参数用r表示是读取zip文件,w或a是创建一个zip文件,默认使用r """
print(zipfile.ZipFile(file_path))
print(zipfile.ZipFile(file_path, 'r'))
print(zipfile.ZipFile(file_path2, 'w'))

<zipfile.ZipFile filename='D:/test.zip' mode='r'>
<zipfile.ZipFile filename='D:/test.zip' mode='r'>
<zipfile.ZipFile filename='xxx' mode='w'>

# z.namelist() 会返回压缩包内所有文件名的列表。
file = zipfile.ZipFile(file_path)
for file_name in file.namelist():
    print(file_name)

a.txt
b.txt
c.txt

压缩包信息

ZipFile.getinfo(),ZipFile.infolist()和ZipFile.namelist()
import zipfile

file_path = "D:/test.zip"
file = zipfile.ZipFile(file_path)
print(file.getinfo("a.txt"))
print(file.infolist())
print(file.namelist())
file.close()

<ZipInfo filename='a.txt' external_attr=0x20 file_size=9>
[<ZipInfo filename='a.txt' external_attr=0x20 file_size=9>, <ZipInfo filename='b.txt' external_attr=0x20 file_size=9>, <ZipInfo filename='c.txt' external_attr=0x20 file_size=9>]
['a.txt', 'b.txt', 'c.txt']


解压文件

ZipFile.extractall()
with zipfile.ZipFile('models.zip' as zf:
    zf.extractall(path=download_dir)
ZipFile.extract(member[, path[, pwd]])
**将zip文档内的指定文件解压到当前目录**
import zipfile, os

f = zipfile.ZipFile(zipfilepath) # 读取需要解压文件
for file in f.namelist():
  f.extract(file,  savedir)  #在 savedir 解压文件
f.close()


f = zipfile.ZipFile(os.path.join(os.getcwd(), 'file.zip')) #拼接成一个路径
for file in f.namelist():
  f.extract(file, r'D:/Work')  #在D:/Work中解压文件
f.close()

压缩文件

 ZipFile.write(filename[, arcname[, compress_type]])

**将指定文件添加到zip文档中**
filename为文件路径,arcname为添加到zip文档之后保存的名称
import zipfile, os
zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')
zipFile.write(r'D:/test.doc', '保存的名字', zipfile.ZIP_DEFLATED)
zipFile.close()

# 将文件D:/test.doc添加到压缩文档中

批量压缩

import zipfile  
z = zipfile.ZipFile(filename, 'r')  
print z.read(z.namelist()[0]) 
#这样就读取出z.namelist()中的第一个文件,并且输出到屏幕,当然也可以把它存储到文件。

#下面是创建zip压缩包的方法,与读取的方法其实很类似的:
import zipfile, os  
z = zipfile.ZipFile(filename, 'w') 
# 注意这里的第二个参数是w,这里的filename是压缩包的名字

#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件)
if os.path.isdir(testdir):  
     for d in os.listdir(testdir):  
         z.write(testdir+os.sep+d)  
         # close() 是必须调用的!  
         z.close() 
#面的代码非常的简单。想想还有一个问题,如果我把一个test/111.txt 添加到压缩包里之后我希望在包里它放到test22/111.txt怎么办呢?
#其实这个就是Python ZipFile模块的write方法中第二个参数的作用了。只需要这样调用:
z.write("test/111.txt", "test22/111.txt") 

参考链接

https://cloud.tencent.com/developer/article/2151640

posted @ 2023-10-18 18:18  贝壳里的星海  阅读(94)  评论(0编辑  收藏  举报