zoukankan      html  css  js  c++  java
  • python学习第17天

    .zip压缩模块

    zipfile 后缀是zip

    import zipfile

    1.压缩文件

    (1)创建压缩包

    zf = zipfile.ZipFile("ceshi0512.zip","w",zipfile.ZIP_DEFLATED)
    

    (2)把文件写入到压缩包中

    # write(路径,别名)
    zf.write(r"E:python30day17ceshi1001.txt","1.txt")
    zf.write(r"E:python30day17ceshi1002.txt","2.txt")
    # 可以允许临时创建一个文件夹tmp
    zf.write(r"E:python30day17ceshi1003.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:python30day17ceshi1004.php","4.py")
    zf.close()
    
    # 使用with语法进行优化 (可以省略close操作) 推荐
    with zipfile.ZipFile("ceshi0512.zip","a",zipfile.ZIP_DEFLATED) as zf:
    	zf.write(r"E:python30day17ceshi1004.php","6666.py")
    

    4.查看文件

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

    二.tarfil压缩模块

    .tar .tar.gz .tar.bz2

    import tarfile

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

    1.压缩文件

    (1)创建tar压缩包

    tf = tarfile.open("ceshi0513.tar","w",encoding="utf-8")
    

    (2)添加文件打包

    # add(路径,别名)
    tf.add(r"E:python30day17ceshi1001.txt","1.txt")
    tf.add(r"E:python30day17ceshi1002.txt","222")
    tf.add(r"E:python30day17ceshi1003.py","/tmp/3.py")
    

    (3)关闭文件

    tf.close()
    

    (4) .tar.gz 的压缩包

    tf = tarfile.open("ceshi0514.tar.gz","w:gz",encoding="utf-8")
    tf.add(r"E:python30day17ceshi1001.txt","1.txt")
    tf.add(r"E:python30day17ceshi1002.txt","222")
    tf.add(r"E:python30day17ceshi1003.py","/tmp/3.py")
    tf.close()
    

    (5) .tar.bz2 的压缩包(理论上压缩出来的包最小)

    tf = tarfile.open("ceshi0515.tar.bz2","w:bz2",encoding="utf-8")
    tf.add(r"E:python30day17ceshi1001.txt","1.txt")
    tf.add(r"E:python30day17ceshi1002.txt","222")
    tf.add(r"E:python30day17ceshi1003.py","/tmp/3.py")
    tf.close()
    

    2.解压文件

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

    3.追加文件

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

    4.查看压缩包

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

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

    tarfil的解决方法,文件或者文件夹都可以通过add放到压缩包中

    1)先解压原来的压缩包

    2)把要追加的内容放进去

    3)过滤数据,重新打包

    import os
    pathvar = os.getcwd()
    print(pathvar) # E:python30day17
    
    # 压缩包的路径
    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:python30day17ceshi1004.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)
    

    三.模块与包

    模块部分

    1.import导入模块

    导入一次,终身受益,不会重复导入

    1)模块.变量(mymodule.xboy)

    2)模块.函数(mymodule.dog() )

    3)模块.类(mymodule.Car().color )

    2.导入任意路径下的模块

    默认只能导入当前文件所在的这个文件夹下的所有模块

    通过sys.path可以导入任意路径下的模块

    导入模块时->会去找sys.path这个列表里的路径,如果找到就导入,找不到就报错

    通过append可以在列表里追加路径,来实现导入的功能

    可以给模块起别名(import mymodule2 as m2)

    3.from...import...可以导入单个,多个,或者所有(用*来表示)

    可以定制 *号的范围 ( ___ all ___ =[ ] )

    4.__ name __

    返回模块名字的魔术属性__ name __

    如果当前文件是直接运行的,返回__ main__

    如果当前文件是间接导入的,返回当前文件名(模块名)

    包的部分

    1.import导入包

    1)文件就是一个模块,文件夹就是一个包

    文件夹里面可以有很多的文件,就相当于包里面有很多的模块

    2)__ init __.py 对包(文件夹)进行初始化的脚本文件

    导入包的时候,系统自动调用__ init__ 文件,当前文件夹进行初始化,实际上就是对init中的文件属性进行导入

    3)这个包下的其他模块可以通过初始换文件间接导入

    (1) 导入包,通过init文件初始换,默认引入init文件中的所有属性

    # import package1
    # print(package1.ceshi003)
    

    (2)引入包当中具体的一个模块

    # 方法一
    # import package1.mypath
    # package1.mypath.join()
    
    # 起别名
    # import package1.mypath as pm
    # pm.join()
    
    # 方法二 (通过__init__间接导入,更加简洁)
    # import package1
    # package1.mypath.join()
    

    (3)用 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.导入所有
    """
    from package1 import *
    # print(ceshi002)
    print(ceshi001)
    """
    

    (4)单入口模式(相对路径导入)

    分模块不能单独进行调用,统一由主文件main进行调用
    模块之间的互相嵌套导入,使用相对路径实现
    单入口文件必须和包在同一层级,包里面可以含有各种包和模块

  • 相关阅读:
    OPENGLES 绘制纹理带黑圈pre-multiplying
    listview相关代码整理
    时区列表
    (迪杰斯特拉)Dijkstra算法
    全源最短路径(Floyd算法)
    go配置私有仓库 (go mod配置私有仓库)
    mingw+gcc 10.1下载
    线段树应用及概况
    清理docker常用命令
    minio设置永久访问链接
  • 原文地址:https://www.cnblogs.com/yunchao-520/p/12933612.html
Copyright © 2011-2022 走看看