标准库tarfile、zipfile,可以用来处理压缩文件,如gzip、bz2和lzma等。两者很类似,基本上学会一个库,另一个库也就会了。 一、zipfile库1.1 压缩单个文件import zipfile #请注意这里写的是当前文件夹下的文件名
如果z.write('/A/三体.txt')
那么在“三体.zip”中会生成一个User文件夹。
如果z.write('/A/B/C/三体.txt')
打开“三体.zip”首先看到A,点进A发现B,打开B看到C,最后才看到"三体.txt"。像剥洋葱,玩俄罗斯套娃, 1.2 解压文件with zipfile.ZipFile('三体.zip', 'r') as z:
# 查看压缩包中的文件列表
print(z.namelist())
# 查看压缩包中的第一个文件,相当于open(file).read()
#print(zip.read(z.namelist()[0]))
# 解压 “三体.zip”中的 “三体.txt”文件
z.extract('三体.txt')
# 解压全部
z.extractall()
# 解压,在当前文件夹下会出现一个名为"三体"的文件夹
z.extractall('三体') 1.3 压缩某个目录下所有文件先了解下os.walk()
import os ./.DS_Store
./tarfile学习.md
./tarfile学习.py
./test.txt
./三体.txt
./aa/.DS_Store
./aa/a.txt
./aa/b.txt import os ./aa 有了上面的知识,我们就可以使用zipfile压缩某个目录下所有文件 def compress_file(zipfilename, dirname):
"""
:param zipfilename: 压缩包名字
:param dirname: 要打包的目录
:return:
"""
#如果dirname是文件名
if os.path.isfile(dirname):
with zipfile.ZipFile(zipfilename, 'w') as z:
z.write(dirname) 1.4添加文件到已有的zip包中跟上面的函数类似,只将函数内写入w改成追加a操作。 def addfile(zipfilename, dirname):
#如果dirname是文件名
if os.path.isfile(dirname):
#a:追加写入模式
with zipfile.ZipFile(zipfilename, 'a') as z:
z.write(dirname)
#如果dirname是文件夹
else:
with zipfile.ZipFile(zipfilename, 'a') as z:
for root, dirs, files in os.walk(dirname):
for single_file in files:
if single_file != zipfilename:
filepath = os.path.join(root, single_file)
z.write(filepath) 1.5 查看压缩包中的文件def viewfile(zipfilename):
#r:读取模式
filelist = []
with zipfile.ZipFile(zipfilename, 'r') as z:
filelist+=z.namelist()
return filelist ['tarfile学习.md', 'zipfile学习.md', 'test.txt', '三体.txt', 'aa/a.txt', 'aa/b.txt'] 二、TarFile2.1 压缩文件import tarfile 2.2解压文件with tarfile.open('a.tar', 'r') as tar:
# 查看压缩包内含有的文件
print(tar.getmembers())
# 可选择解压某个文件
tar.extract('三体.txt')
# 解压全部
tar.extractall()
#将压缩包内的文件解压到”三体2“文件夹中
tar.extractall('三体2') [<TarInfo '三体.txt' at 0x1023bf048>] 2.3 压缩某个目录下所有文件基本上同zipfile def compress_file(tarfilename, dirname):
if os.path.isfile(dirname):
with tarfile.open(tarfilename, 'w') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfilename, 'w') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
if single_file != tarfilename:
filepath = os.path.join(root, single_file)
tar.add(filepath) 2.4 添加文件到已有的tar包中def addfile(tarfilename, dirname):
if os.path.isfile(dirname):
with tarfile.open(tarfilename, 'a') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfilename, 'a') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
#if single_file != tarfilename:
filepath = os.path.join(root, single_file)
tar.add(filepath) 历史文章:数据采集【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie” 【视频】快来get新技能--抓包+cookie,爬微博不再是梦 文本处理分析图片数据处理其他 |
|