zoukankan      html  css  js  c++  java
  • 八、模块和包

    一、模块(modue)的概念

      在Python中,一个.py文件就称之为一个模块(Module)

      模块一共三种:

        1.python标准库

        2.第三方模块

        3.自定义模块

    二、模块导入

      被导入的模块,需与当前文件处于同一个文件夹下,才可使用相对路径导入,否则报错

      (sys.path存储了当前文件的路径以及标准库模块的路径)

      1、import  module1[, module2[,... moduleN]

          import test

          实质是:先得到test------>与path中的环境变量组成一个绝对路径------>导入文件内容------>执行文件全部内容

      2、from  modname import name1[, name2[, ... nameN]]

          from test import add

          从模块中导入部分函数

          from dict1 import test

            从文件夹dict1中导入test.py文件

          实质是:先得到dict1 est.py------>与path中的环境变量组成一个绝对路径------>导入文件内容------>执行文件全部内容

      3、from  modname import *

          导入模块中所有函数,但须注意,导入的函数如果和当前文件中的函数有重名现象,其中一个会被覆盖掉,先定义的被覆盖掉

      请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。      

      __init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字

       调用包就是执行包下的__init__.py文件

        无论1还是2,首先通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来

    三、time模块

     1、 三种时间表示:

    • 时间戳(timestamp) :         时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。运行“type(time.time())”,返回的是float类型。
    • 格式化的时间字符串
    • 元组(struct_time)   :         struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
    import time
     
    time.time()           #时间戳1473525444.037215
    time.localtime()      #struct_time
    gmtime()              #将一个时间戳转换为UTC时区(0时区)的struct_time

    四、random模块

      random.random()                   #(0,1)----float

      random.randint(1,3)               #[1,3]----int

      random.randrange(1,3)             #[1,3)

      random.choice([1,'23',[4,5]])     #N选一

      random.sample([1,'23',[4,5]],2)   #N选二

      random.uniform(1,3)               #1和3之间浮点型数据

      random.shuffle(item)          #打乱item元素的顺序

    #练习~四位验证码
    import random
    def aaa():
        rec=''
        for i in range(4):
            a=random.randint(0,9)
            b=chr(random.randint(65,90))
            c=chr(random.randint(97,122))
            rec+=str(random.choice([a,b,c]))
        print(rec)
    aaa()

    五、OS模块

    os.getcwd()                         获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")            改变当前脚本工作目录;相当于shell下cd
    os.curdir                  返回当前目录: ('.')
    os.pardir                  获取当前目录的父目录字符串名:('..')
    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1')        若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')            生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')            删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')           列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()                删除一个文件
    os.rename("oldname","newname")     重命名文件/目录
    os.stat('path/filename')        获取文件/目录信息
    os.sep                    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep                  输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep                 输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name                    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")        运行shell命令,直接显示
    os.environ                 获取系统环境变量
    os.path.abspath(path)         返回path规范化的绝对路径 os.path.split(path)          将path分割成目录和文件名二元组返回 os.path.dirname(path)         返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path)        返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path)         如果path存在,返回True;如果path不存在,返回False os.path.isabs(path)          如果path是绝对路径,返回True os.path.isfile(path)         如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path)          如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path)        返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path)       返回path所指向的文件或者目录的最后修改时间

    六、sys模块

    sys.argv           命令行参数List,第一个元素是程序本身路径

    sys.exit(n)        退出程序,正常退出时exit(0)

    sys.version        获取Python解释程序的版本信息

    sys.maxint         最大的Int

    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

    sys.platform       返回操作系统平台名称

    #进度条
    import sys,time
    for i in range(10):
        sys.stdout.write('#')
        time.sleep(1)
        sys.stdout.flush()

     七、re模块

      1. 元字符

        .     匹配任意字符,除了换行符

        ^    匹配字符串的开头

        $    匹配字符串的末尾

        *     匹配0个或多个的表达式

        +    匹配1个或多个的表达式

        ?    转为非贪婪模式

        e{ n}   匹配n个前面表达式

        e{ n,}  匹配n或无穷个前面表达式

        e{ n, m}   匹配n到m个前面表达式

        |      或

        w     匹配数字字母下划线

        W    匹配非数字字母下划线

        s    匹配任意空白字符,等价于 [ f]

        S    匹配任意非空字符

        d    匹配任意数字

        D    匹配任意非数字

            匹配一个单词边界,也就是指单词和空格间的位置

    import re
    ret=re.findall('cl','abcle')
    print(ret)   #[]
    ret=re.findall('c\l','abcle')
    print(ret)   #[]
    ret=re.findall('c\\l','abcle')
    print(ret)   #['c\l']
    ret=re.findall(r'c\l','abcle')
    print(ret)   #['c\l']

    因为表达式为'c\\l'时,先传给python解释器,解释器得到‘c\l’,再将‘c\l’传给re解释器,解释器得到‘cl’
    r'c\l'表示传给re解释器的就是‘c\l’

    2. 元字符之分组

    ret=re.search('(?P<id>d{2})/(?P<name>w{3})','23/com')
    print(ret.group())       #23/com
    print(ret.group('id'))   #23

    3. re模块常用方法

      findall( )   返回所有满足匹配条件的结果,放在列表里

      search( )  在字符串内查找匹配,只找到第一个匹配的对象,该对象可通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None

      match( )    同search,但只在字符串开始处进行匹配

      split('[ab]','abcd')       先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割

    aaa=re.split('[ab]','abdfeaabcc')    
    print(aaa)
    
    #['','','dfe','','','cc']

      sub('d','aaa','sgee43jisg55',2)   将字符串中的数字替换为aaa,且替换2次 #sgeeaaaaaajisg55

      compile函数:

         用于编辑正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用

    pattern = re.compile(r'd+')                #将正则表达式赋值给变量,方便后续重复使用
    m = pattern.match('one12twothree34four') 
    m = pattern.match('one123456786666e34four', 2, 10) # 从‘e’的位置开始匹配匹配到8结束,没有匹配
    m=pattern.match('sds128545585sgegsgegw',3,6)   #从1匹配到8
    #<_sre.SRE_Match object; span=<3,6>,match='128'>

      finditer() 字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

    import re
    it = re.finditer(r"d+","12a32bc43jf3") 
    for match in it: 
        print (match.group() )
    #12
    #32
    #43
    #3
  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-结构体&文件
    C博客作业05--2019-指针
    面向对象设计大作业——QQ联系人系统
    DS博客作业05--查找
    DS博客作业04--图
  • 原文地址:https://www.cnblogs.com/haoy/p/10314465.html
Copyright © 2011-2022 走看看