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")