压缩模块和导包

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   中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值