压缩模块zipfile (后缀为zip) & tarfile(后缀为.tar | .tar.gz | .tar.bz2)

### zipfile 后缀是zip

import zipfile

1.压缩文件

(1) 创建压缩包 
zf = zipfile.ZipFile("ceshi0512.zip","w",zipfile.ZIP_DEFLATED)

(2) 把文件写入到压缩包当中
 write(路径,别名)
zf.write(r"E:\python30\day17\ceshi100\1.txt","1.txt")
zf.write(r"E:\python30\day17\ceshi100\2.txt","2.txt")
 可以允许临时创建一个文件夹tmp
zf.write(r"E:\python30\day17\ceshi100\3.py","/tmp/3.py")

 (3) 关闭压缩文件
zf.close()

2.解压文件

zf = zipfile.ZipFile("ceshi0512.zip","r")
 ./代表相对于当前路径(可以自定义路径,是一个文件夹★★★★★)
  zf.extractall("./ceshi300")
   zf.extract(文件,文件夹)
zf.extract("1.txt","./ceshi400")
zf.close()

3.追加文件

zf = zipfile.ZipFile("ceshi0512.zip","a",zipfile.ZIP_DEFLATED)
zf.write(r"E:\python30\day17\ceshi100\4.php","4.py")
zf.close()

 使用with语法进行优化 (可以省略close操作) 推荐
with zipfile.ZipFile("ceshi0512.zip","a",zipfile.ZIP_DEFLATED) as zf:
	zf.write(r"E:\python30\day17\ceshi100\4.php","6666.py")

4.查看文件

with zipfile.ZipFile("ceshi0512.zip","r",zipfile.ZIP_DEFLATED) as zf:
	lst = zf.namelist()
print(lst)

### tarfile .tar | .tar.gz | .tar.bz2

import tarfile
"""官方说法, .tar.bz2 的压缩算法,包的大小最小."""

1.压缩文件

创建tar压缩包

tf = tarfile.open("ceshi0513.tar","w",encoding="utf-8")
 添加文件打包
 add(路径,别名)
tf.add(r"E:\python30\day17\ceshi100\1.txt","1.txt")
tf.add(r"E:\python30\day17\ceshi100\2.txt","222")
tf.add(r"E:\python30\day17\ceshi100\3.py","/tmp/3.py")
关闭文件
tf.close()

.tar.gz 的压缩包

tf = tarfile.open("ceshi0514.tar.gz","w:gz",encoding="utf-8")
tf.add(r"E:\python30\day17\ceshi100\1.txt","1.txt")
tf.add(r"E:\python30\day17\ceshi100\2.txt","222")
tf.add(r"E:\python30\day17\ceshi100\3.py","/tmp/3.py")
tf.close()

.tar.bz2 的压缩包

tf = tarfile.open("ceshi0515.tar.bz2","w:bz2",encoding="utf-8")
tf.add(r"E:\python30\day17\ceshi100\1.txt","1.txt")
tf.add(r"E:\python30\day17\ceshi100\2.txt","222")
tf.add(r"E:\python30\day17\ceshi100\3.py","/tmp/3.py")
tf.close()

import zipfile

2.解压文件

tf = tarfile.open("ceshi0514.tar.gz","r",encoding="utf-8")
#extractall(路径)      解压所有文件到某个路径下
tf.extractall('11')
extract(文件,路径)    解压指定的某个文件到某个路径下
tf.extract("222","ceshi600")
tf.close()

3.追加文件

"""只能对w模式下的打包进行追加,其他的模式不行"""
with tarfile.open("ceshi0513.tar","a",encoding="utf-8") as tf:
tf.add(r"E:\python30\day17\ceshi100\4.php","4.php")

 对于tar.gz  或者 tar.bz2已经压缩过的包无法追加文件

4.查看压缩包

with tarfile.open("ceshi0513.tar","r",encoding="utf-8") as tf:
	lst = tf.getnames()

print(lst)

### 对tarfile 不能追加的文件的bug 进行优化.

tarfile 的解决方法   文件或者文件夹都可以通过add放到压缩包中
(1) 先解压原来的压缩包
(2) 把要追加的内容放进去
(3) 过滤数据,重新打包

import os
pathvar = os.getcwd()
print(pathvar) # E:\python30\day17

压缩包的路径

pathvar1 = os.path.join(pathvar,"ceshi0515.tar.bz2")
print(pathvar1)

解压文件夹的路径

pathvar2 = os.path.join(pathvar,"ceshi0515")
print(pathvar2)

1.先解压压缩包

with tarfile.open(pathvar1,"r",encoding="utf-8") as tf:
	tf.extractall(pathvar2)

2.把追加的内容放进来

import shutil
shutil.copy(r"E:\python30\day17\ceshi100\4.php",pathvar2)

3.过滤数据,重新打包

"""过滤掉222这个文件,剩下的文件重新打包"""
lst = os.listdir(pathvar2)
print(lst) # ['1.txt', '222', '4.php', 'tmp']

with tarfile.open(pathvar1,"w:bz2",encoding="utf-8") as tf:
	for i in lst:
		# print(i)
		pathnew = os.path.join(pathvar2,i)
		print(pathnew)
		# add(路径,别名)
		if i != "222":
			tf.add(pathnew,i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值