9、zipfile压缩模块
使用方式:import 导入 zipfile 模块 import zipfile
r:读 w:写 a:追加
(1)创建压缩文件:zipfile.ZipFile(文件路径,“w”, 压缩方式),默认只存储打包,
zipfile.ZIP_STORED:默认只存储打包,不会对文件进行压缩
zipfile.ZIP_DEFLATED:对文件进行压缩操作
写入文件:write(路径,别名),可临时创建一个文件夹
(2)打开压缩文件:zipfile.ZipFile(文件路径,“r”)
解压文件:
extractall(文件夹)解压所有
extract(文件,文件夹)
(3)追加文件:zipfile.ZipFile(文件路径,“a”,压缩方式),
(4)查看压缩包文件:namelist() 返回一个列表
(5)关闭文件:close
(6)如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
import zipfile
# 创建压缩文件
zf = zipfile.ZipFile("ceshi1.zip", "w", zipfile.ZIP_DEFLATED)
# 写入到压缩包中
zf.write(r"5-20test.py")
zf.write(r"E:\workspace3.6\text\shopping.py", 'shopping.py')
zf.write(r"E:\workspace3.6\text\shopping.py", 'tmp/shopping.py')
# 关闭压缩包
zf.close()
# 从压缩包解压文件
zf = zipfile.ZipFile("ceshi1.zip", "r")
# 解压所有文件
zf.extractall("./ceshi")
# 解压单个文件
zf.extract("shopping.py", "./ceshi")
# 关闭压缩包
zf.close()
zf = zipfile.ZipFile('ceshi1.zip', 'a', zipfile.ZIP_DEFLATED)
# 追加文件
zf.write(r"E:\workspace3.6\text\shopping.json", "shopping.json")
zf.close()
with zipfile.ZipFile("ceshi1.zip", "a", zipfile.ZIP_DEFLATED) as zf:
zf.write(r"E:\workspace3.6\text\shopping.json", "shopping.json")
# 查看文件
with zipfile.ZipFile("ceshi1.zip", "r", zipfile.ZIP_DEFLATED) as zf:
lst = zf.namelist()
print(lst)
10、tarfile压缩模块
使用方式:import 引入 tarfile 模块 import tarfile
有三种压缩方式:.tar .tar.gz .tar.bz2
官方说法,.tar.bz2 的压缩算法,包的大小最小
(1)创建压缩文件:
tarfile.open(压缩文件包,“w”,encoding=“utf-8”)
tarfile.open(压缩文件包,“w:gz”,encoding=“utf-8”)
tarfile.open(压缩文件包,“w:bz2”,encoding=“utf-8”)
写入压缩文件:add(文件路径,文件别名)
(2)解压问价:
extractall(路径) :解压所有文件
extract(文件,路径) :解压指定文件
(3)追加文件:只能针对w模式下的打包进行追加,其他模式不行
(4)查看压缩包文件:getnames()
(5)关闭文件:close()
import tarfile
# 创建tar压缩包
tf = tarfile.open("ceshi2.tar", "w", encoding="utf-8")
# 写入压缩文件
tf.add(r"E:\workspace3.6\text\shopping.json", "shopping.json")
tf.add(r"shopping.py", "shopping.py")
tf.add(r"E:\workspace3.6\text\5-20test.py", "tmp/5-20test.py")
# 关闭文件
tf.close()
# 创建tar.gz压缩包
tf = tarfile.open("ceshi3.tar.gz", "w:gz", encoding="utf-8")
tf.add(r"E:\workspace3.6\text\shopping.json", "shopping.json")
tf.add(r"shopping.py", "shopping.py")
tf.add(r"E:\workspace3.6\text\5-20test.py", "/tmp/5-20test.py")
tf.close()
# .tar.bz2压缩包
tf = tarfile.open("ceshi0515.tar.bz2", "w:bz2", encoding="utf-8")
tf.add(r"E:\workspace3.6\text\shopping.json", "shopping.json")
tf.add(r"shopping.py", "shopping.py")
tf.add(r"E:\workspace3.6\text\5-20test.py", "/tmp/5-20test.py")
tf.close()
# 解压文件
tf = tarfile.open("ceshi2.tar", "r", encoding="utf-8")
# extractall(路径)
tf.extractall("ceshi2")
# extract(文件, 路径)
tf.extract("shopping.py", "ceshi2")
tf.close()
# 追加文件
with tarfile.open("ceshi2.tar", "a", encoding="utf-8") as tf:
tf.add(r"E:\workspace3.6\text\5-20test.py", "5-20test.py")
# 查看压缩包
with tarfile.open("ceshi2.tar", "r", encoding="utf-8") as tf:
lst = tf.getnames()
print(lst)
(6)tarfile不能追加的文件bug优化
"""
tarfile 的解决方法:文件或者文件夹都可以通过add放到压缩包中
(1) 先解压原来的压缩包
(2) 把要追加的内容放进去
(3) 过滤数据,重新打包
"""
import os
pathvar = os.getcwd()
# 压缩包的路径
pathvar1 = os.path.join(pathvar, "ceshi2.tar.bz2")
print(pathvar1)
# 解压文件夹的路径
pathvar2 = os.path.join(pathvar, "ceshi2")
print(pathvar2)
# 1.先解压压缩包
with tarfile.open(pathvar1, "r", encoding="utf-8") as tf:
tf.extractall(pathvar2)
# 2.把追加的内容放进来
import shutil
shutil.copy(r"E:\workspace3.6\text\5-20test.py", pathvar2)
# 3.过滤数据,重新打包
"""过滤掉5-20test.py这个文件,剩下的文件重新打包"""
lst = os.listdir(pathvar2)
print(lst)
with tarfile.open(pathvar1, "w:bz2", encoding="utf-8") as tf:
for i in lst:
pathnew = os.path.join(pathvar2, i)
print(pathnew)
# add(路径,别名)
if i != "5-20test.py":
tf.add(pathnew, i)
十六、模块导入
模块与包的概念:
模块是一个文件
包是一个文件夹
文件夹里面可以有很多的文件,就相当于包里面有很多的模块
import导入时,导入一次即可
1、模块部分
1)导入方式:import 模块名
(1)模块.变量
(2)模块.函数
(3)模块.类
2)导入任意路径下的模块:默认只能导入当前文件所在的这个文件夹下的所有模块,通过sys.path可以导入任意路径下的的模块;导入模块时,会去找sys.path这个列表里面的路径,如果找到就导入,找不到就报错,通过append可以在列表里追加路径,来实现导入的功能
import sys
sys.path
sys.path.append(r"路径")
通过添加用户环境变量实现导入模块
3)调用方式起别名
import 模块 as 别名
4)from … import … 从…导入…
导入单个:from 模块 import …
导入多个:from 模块 import … , … , …
导入所有:from 模块 import *
起别名:from 模块 import … as …
定制*号范围:在需要导入的模块中设置:__all__ = [“函数名、变量或类”] 中括号中是允许调用的方法
5)__name__
返回模块名字的魔术属性__name__
当文件是直接运行的,返回__main__
当文件是间接导入的,返回当前文件名(模块名)
2、包部分
1)导入方式:import 包名
__init__.py文件是对包进行初始化的脚本文件,导入包的时候,系统自动调用__init__文件,对当前文件夹进行初始化,实际是对init中的文件属性进行导入
包下的其它模块可以通过初始化文件间接导入
(1)导入包,通过init文件初始化,默认引入init文件中所有属性:import 包名
(2)引入包中具体的一个模块:
-
方法一:import 包名.模块名
起别名:import 包名.模块名 as 别名
-
方法二:通过__init__简介导入,更加简洁
直接在init文件中导入模块方法
(3)用from … import 从包导入成员(落脚点在成员或者模块)
from 包名 import 变量
from 包名 import 方法
from 包名.模块 import 方法
别名通过 as
from 包名 import 变量 as 别名
from 包名 import 方法 as 别名
from 包名.模块 import 方 as 别名
(4)导入所有
from 包名 import *
3、单入口模式(相对路径导入)
单入口模式:只通过主文件来调用分模块内容,分模块不单独执行
分模块不能单独执行调用,统一由主文件main进行调用
模块之间的互相嵌套导入,使用相对路径实现
单入口文件必须和包在同一层级,包里面可以含有各种包和模块
from . import pkg 相对于当前路径引入模块
from .pko2 import ceshi204 相对于当前模块引入具体属性
from .. import pkg2_module1 相对于上一级引入模块
from ..pkg2_two import pkt1 相对于上一级的某个包引入模块
from ..pkg2_two.pkt2 import ceshi209 相对于上一级某个包下的某个模块引入某属性
. 当前路径
.. 当前路径的上一层
... 当前路径的上一层的上一层
.... 当前路径的上一层的上一层的上一层
可以一直添加上一层,无边界
运用于from ........... import 中