• zip压缩模块,tarfile压缩模块,包和模块,format格式化的复习--day17


    1.zipfile模块

    import zipfile   #导入模块
    1.压缩文件
    (1)创建压缩包  参数1压缩包名字,参数2以w模式创建,参数3压缩固定写法
    zf = zipfile.ZipFile("ceshi0512,zip","w",zipfile.ZIP_DEFLATED)
    
    (2)把文件写入压缩包中
    #起别名的情况,用绝对路径
    write(绝对路径,别名)
    zf.write(r"E:python30day17ceshi1001.txt","1.txt")
    #可以临时创建一个文件夹tmp
    zf.write(r"E:python30day17ceshi1002.txt","/tmp/2.txt")
    
    #不起别名的情况,用相对路径的文件名
    zf.write("./3.txt")
    
    (3)关闭压缩文件
    zf.close()
    

      

    解压压缩包
    #参数1压缩包名字,参数2以r的形式解压
    zf =zipfile.ZipFile("ceshi05.zip","r")  
    
    #解压所有文件到ceshi300文件夹,文件夹不存在自动创建
    zf.extractall(",/ceshi300")   
    
    #参数1为指定的文件,参数2为解压后的文件夹,不存在则创建
    zf.extrat("1.txt","./ceshi400") 
    
    #关闭
    zf.close() 
    

      

    追加文件  a
    #如果压缩包不存在,会自动创建并把要追加的文件添加进去
    zf = zipfile.ZipFile("ceshi02.zip","a",zip.file.ZIP_DEFLATED)
    zf.write(r"E:pythonprojectpython_allceshiceshi1.txt","1.txt")
    zf.close()
    

      

    with语法
    with zipfile.ZipFile("ceshi02","a",zipfile.ZIP_DEFLATED) as zf:
        #文件名路径,别名
        zf.write(r"E:pythonprojectpython_allceshiceshi1.txt","cs.py") 
    

      

    查看文件
    with zipfile.ZipFile("ceshi02","r",zipfile.ZIP_DEFLATED) as zf:
        res = zf.namelist()
     print(res) ##返回的是个列表  里面是压缩包里面的文件名
    

      

    2.tarfile模块

    tarfile   包括  .tar |  .tar.gz  |  .tar.bz2
    import tarfile     #官方说法,tar.bz2的压缩算法,包的大小最小
    1.创建tar压缩包    10240
    tf = tarfile.open('ceshi02.tar',"w",encoding="utf-8") 
    #添加文件打包
    tf.add(r"E:pythonprojectpython_allceshiceshi1.txt","1.txt") #路径,别名
    tf.close()
    
    
    2.tar.gz的压缩包   245
    tf =tarfile.open("ceshi03.tar.gz","w:gz",encoding="utf-8")
    tf.add(r"E:pythonprojectpython_allceshiceshi1.txt","1.txt")
    
    3.tar.bz2的压缩包  240理论上 压缩出来的最小
    tf = tarfile.open("ceshi04.tar.bz2","w:bz2",encoding="utf-8")
    tf.add(r"E:pythonprojectpython_allceshiceshi1.txt","1.txt")
    

      

    解压压缩包
    tf = tarfile.open("ceshi01.tar.gz","r",encoding='UTF-8')
    tf.extractall("./ceshi200")  #全部解压到当前路径的测试200文件夹中
    tf.extract("ceshi.txt","./ceshi200") #指定文件解压到当前路径的测试200文件夹中
    

      

    追加文件  a
    只能对w模式下的打包进行追加,其他模式不行
    with tarfile.open("ceshi2.tar","a",encoding="utf-8") as tf:
        tf.add(r"E:pythonprojectpython_allceshiceshi4.txt","4.txt")
    #对于tar.gz  或者 tar.bz2 已经压缩过的包无法追加文件
    

      

    查看压缩包
    with tarfile.open("ceshi05.tar","r",encoding="utf-8") as tf:
        lst = tf.getnames()  #获取的是所有文件名,哪怕有嵌套文件夹
    print(lst)  #['1.txt', 'tmp/2.txt', '4.py']
    

      

    对tarfile  不能追加的文件的bug  进行优化
    '''
    tarfile的解决办法  文件或者文件夹都可以通过add方法添加到压缩包
    (1) 先解压原来的压缩包
    (2) 把要追加的内容放进去
    (3) 过滤数据,重新打包
    '''
    import os
    import shutil
    import tarfile
    #1.先获取当前的路径
    pathvar = os.getcwd()
    print(pathvar)
    
    #2.获取压缩包的路径
    pathvar1 =os.path.join(pathvar,"ceshi03.tar,bz2")
    print(pathvar1)
    
    #3.获取解压后文件夹的路径
    pathvar2 =os.path,join(pathvar,"ceshi03")
    print(pathvar2)
    
    #4.先把压缩包解压
    with tarfile.open(pathvar1,"r",encoding="utf-8") as tf:
        tf.extractall(pathvar2)
    
    #5.把追加的内容放到解压后的文件夹中
    shutil.copy(r"E:pythonprojectpython_allceshilogin.py",pathvar2)
    
    #6.重新打包
    lst = os.listdir(pathvar2)
    print(lst)  #['1.txt', '2.txt', 'ceshi4.txt', 'login.py']
    
    #重新打包进压缩包
    with tarfile.open(pathvar2,"a",encoding="utf-8") as tf:
        for i in lst:  #循环列表
            newpath = os.path.join(pathvar2,i)  #拼接解压路径跟文件名
            print(newpath)
            tf.add(newpath,i)   #写入追加      路径,别名
    

      

    3.包和模块

    包部分
    import 导入包
    
    1.文件就是一个模块,文件夹就是一个包,文件夹里面可以有很多文件,就相当于包里面有很多模块
    
    2.__init__.py 对包(文件夹)进行初始化的脚本文件,导入包的时候,系统自动调用__init__文件,当前文件夹进行初始化,实际上就是对init中的文件属性进行导入
    
    3.这个包下的其他模块可以通过初始化文件间接导入
    
    #1.导入包,通过init文件初始化,默认引入init文件中的所有属性
    #__init__文件中已经写入
    '''
    #指定*号的范围
    __all__ = ["ceshi001"]
    
    ceshi001 = 1
    ceshi002 = 2
    ceshi003 = 3
    #在初始化时,指定这个文件夹中的哪些模块进行导入  方法二
    from package1 import mypath
    '''
    
    #import package1
    #print(package1.ceshi003)
    
    #2.引入包当中具体的一个模块
    #方法一
    #import package1.mypath
    #package1.mypath.join()
    
    
    #起别名
    #import package1.mypath as pm
    #pm.mypath.join()
    
    #方法二(通过init文件间接导入,更加间接)
    #import package1
    #package1.mypath.join()
    
    
    # ### 2.用from..import 从包导入成员(落脚点在模块或者成员)
    #1.包.模块.成员
    #from package1 import ceshi001
    #print(ceshi001)
    
    #from package1 import mypath
    #mypath.getsize()
    
    #from package1.mypath import getsize
    #getsize()
    
    
    #2.起别名
    #from package1.mypath import ceshi004 as c4,ceshi005 as c5
    #print(c4,c5)
    
    #3.导入所有
    '''
    可以在init文件中指定*号的范围
    from package1 import *
    #print(ceshi002)
    print(ceshi001)
    '''
    
    # ### 3.单入口模式(相对路径导入)
    import package2.pkg1.pkg1_modules as pppm
    #print(pppm,ceshi100)
    

      

    模块部分
    import 导入
    
    '''
    # 导入一次,终身受益,不会重复导入
    '''
    import mymodule
    #import  mymodule
    
    #1.模块.变量
    #print(mymodule.xboy)
    
    #2.模块.函数
    #mymodule.dog()
    
    #3.模块,类
    #print(mymodule.Car().color)
    
    
    # ### 2.导入任意路径下的模块
    '''
    默认只能导入当前文件所在的这个文件夹下的所有模块
    通过sys.path 可以导入任意路径下的模块
    导入模块时 -> 会去找sys.path这个列表里面的路径,如果找到就能导入,找不到就报错
    通过append可以在列表里面追加路径,来实现导入的功能
    '''
    import sys
    print(sys.path)
    sys.path.append(r"E:python30day16")
    '''
    # \ =>  为了防止转义
    [
    'E:\python30\day17\import_bao', 
    'E:\aaabbb', 
    'E:\aaabbb\venv\Scripts\python36.zip', 
    'C:\Users\wangwen\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\wangwen\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\wangwen\AppData\Local\Programs\Python\Python36', 
    'E:\aaabbb\venv', 'E:\aaabbb\venv\lib\site-packages', 'E:\aaabbb\venv\lib\site-packages\setuptools-40.8.0-py3.6.egg', 
    'E:\aaabbb\venv\lib\site-packages\pip-19.0.3-py3.6.egg',
    E:python30day16
    ]
    执行命令 -> 找路径 -> 执行对应的文件
    环境变量
    '''
    import mymodule2
    print(mymodule2.a)
    print(mymodule2.b)
    
    # 起别名
    '''
    import mymodule2 as m2
    print(m2.a)
    print(m2.b)
    '''
    
    # ### 3.from ... import ... 从...导入
    
    #导入单个
    '''
    from mymodule import  xboy
    print(xboy)
    '''
    
    #导入多个
    '''
    from mymodule import xboy,xgirl,dog
    print(xboy)
    dog()
    '''
    
    #导入所有 * (代表所有)
    '''
    from mymodule import *
    cat()
    '''
    #起别名
    '''
    from mymodule import xboy as xb,xgirl as xg
    print(xb)
    print(xg)
    '''
    
    #定义*号的范围
    '''
    from mymodule import *  #可以在mymodule中设置 __all__ = ['dog']
    print(xboy)  #报错
    dao()
    '''
    
    # ### 4.__name__
    '''
    返回模块名字的魔术属性__name__
        如果当前文件是直接运行的,返回__main__
        如果当前文件是间接运行的,返回当前文件名(模块名)
    '''
    

      

    4.format格式化复习

    #强制指定参数类型
    strvar ="{:s}".format("天照")
    
    #关键字传参
    strvar ="{who}".format(who="天照")
    
    #关键字传参,并且指定类型
    strvar = "{who:s}".format(who="天照")
    
    #关键字传参,并且指定类型,并且填充字符
    strvar ="{who:*^10s}".format(who="天照")  #****天照****
    
    
    #容器类型传参
    dic = {"name":"天照"}
    strvar = "{dic[name]}".format(dic=dic)
    
    #容器类型传参,并且指定类型,并且填充字符
    dic = {"name":"天照"}
    strvar = {dic[name]:*^10s}.format(dic=dic)
    
    #容器类型传参,并且填充字符串
    dic = {"name":"天照"}
    strvar = "{dic[name]:*<10}".format(dic=dic)  #原字符居左
    
    
    #容器类型传参,并且填充字符,  #原字符串居右
    dic = {"name":"天照"}
    strvar = "{dic[name]:>10}".format(dic=dic)  #        建中
    

      

  • 相关阅读:
    html页面小技巧
    文件上传动态获取文件名
    thymeleaf之下拉框回显选中
    地图/导航控件哪家强?DevExpress WPF v19.2帮你忙
    Web UI开发神器—Kendo UI for jQuery数据管理之过滤操作
    开启.NET Core 3时代,DevExpress v19.2.5带你全新启航
    DevExpress WPF 2020全新出发,功能计划蓝图一览
    2020还有9天!Winforms开发有哪些期待?DevExpress 2020计划出炉
    Web UI开发神器—Kendo UI for jQuery数据管理网格编辑操作
    甘特图、Data Editors控件新玩法—DevExpress WPF v19.2
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/12934719.html
Copyright © 2020-2023  润新知