zoukankan      html  css  js  c++  java
  • day 16 包,random,shutil

    包:

     函数过多,可以分模块文件去管理函数,模块文件过多,将模块文件分类放在一个个的文件夹中,这个文件夹就叫做包,组织结构更加清晰,合理!

      模式就是被别人使用,包既然是一些模块的集合,也是被调用。

      文件:

        1、 被别人使用

        2、当做脚本自己使用

        执行文件运行时,会将执行文件的当前目录记载到sys.path的列表中

    包也是模块,他是模块的集合体,所以引用包也会反生三件事情:

    1、创建一个以包名命名的名称空间

    2、执行包中的__init__文件,将__init__里面的代码块,加载到以包名命名的名称空间中

    3、调用包内的名字必须通过包名. 的方式

     

    # 想要在此文件引用 bbb包的m3模块 怎么做?
    # 第一步 在此文件 import aaa
    # 第二步:在aaa 的 __init__ 添加 from aaa import bbb
    # 第三步:在bbb 的 __init__ 添加 from aaa.bbb import m3
    # 完成以上三步,那么我在此执行文件就可以引用bbb包的m3模块里面的名字。
    # aaa.bbb.m3.func3()
    
    # 上面的需求满可以这么做:
    # from aaa.bbb import func3
    # m3.func3()

    总结:

    1、from a.b import c      . 的左边一定十个包,import后面一定是一个具体的名字

    2、包里面的__init__ 如果想要引用模块,必须是 from.... import ....

    3、from  a.b.c.d import e.f.g  错误,import右边不能有点(.)

    4、form  a.b.c.d import e

    相对导入和绝对导入:

    # 绝对导入
    from NB1.m1 import f1,f2
    # 这样导入是为了让 00代码草稿 访问
    # 如果只是在NB1的__init__使用,直接from m1 import f1, f2 即可
    from NB1.m2 import f3,f4
    from NB1.m3 import f5,f6
    
    # 相对导入
    from .m1 import f1,f2
    from .m2 import f3,f4
    from .m3 import f5,f6

    总结:

    绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
    优点: 执行文件与被导入的模块中都可以使用
    缺点: 所有导入都是以sys.path为起始点,导入麻烦

    相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
    符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
    优点: 导入更加简单
    缺点: 只能在导入包中的模块时才能使用

     import random:

    # print(random.random())  #  大于0且小于1之间的小数
    # print(random.uniform(1,3))  # #大于1小于3的小数
    # print(random.randint(1,5))  # 大于等于1且小于等于5之间的整数
    # print(random.randrange(1,10,2))  # 10以内的奇数
    # print(random.choice(['alex','wusir','日天'])) # 多选一
    # print(random.sample(['alex','wusir','日天','太白'],2)) # 多选多
    # 打乱列表顺序
    l1 = [1,2,3,4,'alex']
    random.shuffle(l1)
    print(l1)

    生成随机验证码

    def cond():
        cond1 = ''
        for i in range(4):
            l1 = random.randrange(10)
            l2 = chr(random.randrange(97,122)) # ASCII码 a~z 对应 97~122
            l3 = chr(random.randrange(65,90))  # 大写 A~Z
            single = random.choice([l1,l2,l3])
            cond1 += str(single)
        print(cond1)
    cond()

    import shutil

    shutil.copyfileobj(fsrc, fdst[, length])
    将文件内容拷贝到另一个文件中

    import shutil
    shutil.copyfileobj(open('file1','r'),open('file2','w'))

    shutil.copyfile(src, dst)
    拷贝文件

    shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

    shutil.copymode(src, dst)
    仅拷贝权限。内容、组、用户均不变

    shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

    shutil.copystat(src, dst)
    仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

    shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

    shutil.copy(src, dst)
    拷贝文件和权限

    shutil.copy('f1.log', 'f2.log')

    shutil.copy2(src, dst)
    拷贝文件和状态信息

    shutil.copy2('f1.log', 'f2.log')

    shutil.ignore_patterns(*patterns)
    shutil.copytree(src, dst, symlinks=False, ignore=None)
    递归的去拷贝文件夹

    shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除

    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

    import zipfile
    
    # 压缩
    z = zipfile.ZipFile('laxi.zip', 'w')
    z.write('a.log')
    z.write('data.data')
    z.close()
    
    # 解压
    z = zipfile.ZipFile('laxi.zip', 'r')
    z.extractall(path='.')
    z.close()
    
    zipfile压缩解压缩
    import tarfile
    
    # 压缩
    >>> t=tarfile.open('/tmp/egon.tar','w')
    >>> t.add('/test1/a.py',arcname='a.bak')
    >>> t.add('/test1/b.py',arcname='b.bak')
    >>> t.close()
    
    
    # 解压
    >>> t=tarfile.open('/tmp/egon.tar','r')
    >>> t.extractall('/egon')
    >>> t.close()
    
    tarfile压缩解压缩
  • 相关阅读:
    (分享)视频压缩Free Video Compressor 汉化版/中文版【全网唯一】
    (分享)根据IP获取地理位置(百度API)
    易语言5.6 精简破解版[Ctoo]
    性能测试---流程篇
    性能测试--系统资源配置篇
    结合sqlmap进行sql注入过程
    MySQL使用记录
    Oracle创表操作记录
    Oracle常用函数记录
    Oracle使用记录
  • 原文地址:https://www.cnblogs.com/echo2019/p/10249952.html
Copyright © 2011-2022 走看看