• 常用的模块


    什么是模块?

       常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

       但其实import加载的模块分为四个通用类别: 

      1 使用python编写的代码(.py文件)

      2 已被编译为共享库或DLL的C或C++扩展

      3 包好一组模块的包

      4 使用C编写并链接到python解释器的内置模块

    为何要使用模块?

       如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

        随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用

    1.random模块

    import random
    print(random.random())   #随机打印0-1的小数
    print(random.uniform(1,2))#随机打印大于1小于2的小数
    import random
    print(random.randint(1,6))# 随机打印1-6之间整数
    print(random.randrange(1,100,(2))) #随机打印1-100的奇数
    print(random.choice([1,2,(23,45),[12,232]]))  #随机打印列表中的一个元素
    print(random.sample([1,2,(23,45),[12,232]],3)) #随机打印列表中3个元素,函数中第二个参数决定打印元素个数
    l = [1,2,5,4,7,8,12]
    random.shuffle(l)
    print(l)   #打乱列表顺序

    2.时间模块

    time模块主要是和时间打交道,通常有三种方式来表达:

    (1) 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.在运行"type(time.time())",返回的是float类型

    (2)格式化的时间字符串(format string):"1999-12-06"

    (3)结构化时间(struct-time) :打印的元组中有9个元素(年,月,日,时,分,秒,一年中的第几周,一年中的第几天等)

    我们来认识一下python中表示时间的几种格式

    import time
    print(time.localtime()) 结构化时间
    #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=16, tm_min=4, tm_sec=33, tm_wday=0, tm_yday=232, tm_isdst=0)
    
    
    print(time.time()) 时间戳时间
    #1534752719.7024927
    
    
    print(time.strftime("%Y-%m-%d %H-%M-%S")) 打印时间字符串
    #2018-08-20 16-14-23

    时间戳是计算机能够识别的时间;时间字符串是人能够看懂的格式;结构化时间则是用来操作时间的.

    三种时间格式的转化

              (时间字符串)       strptime      (结构化时间)        mktime            (时间戳)   

      Format string< = = = >struct_time < = = = > Timestamp

                                            strftime                    localtime(gmtime伦敦时间)

    结构化时间(struct_time)转化为字符串格式:asctime

    时间戳(Timestamp)转化为字符串格式:ctime


    3.sys模块

    sys模块是与python解释器交互的接口

    sys.argv   argv的第一个参数 ,是python这个命令后面的值

    sys.exit    退出程序,正常退出是exit(0),错误退出时sys.exit(1)

    sys.path   返回模块的搜索路径

    4.os模块

    os模块是与操作系统交互的一个接口

    os.mkdir('dir')                    生成单级目录

    os.makedirs('dir1/dir2')     可生成多层递归目录

    os.rmdir(dir)                      删除单级目录,若目录不为空则无法删除

    os.removedirs(dir)             若目录为空,则删除,并递归到上一级目录,若也为空,则删除,以此类推

    os.listdir(dir)/os.path.jion    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

    os.getcwd()         获取当前工作目录,即当前python脚本工作的目录路径

    os.chdir(""dirname)              改变当前脚本工作目录,相当于shell下cd

    os.path.abspath()             能够把找到的相对路径改成绝对路径

    os.path.split()                    就是把一个路径分成两段,第二段是一个文件/文件夹os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 

    os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素   *如果俩个值都需要,就用os.path.split,如果你只要一个值  :os.path.dirname/os.path.basename

    os.path.exists()                    判断文件/文件夹是否存在

    os.path.getsize()               查看文件大小;所有文件夹都至少是4096/8192个字节

    os.system('bash command')  运行shell命令,直接显示

    os.popen("bash command").read()  运行shell命令,获取执行结果

    5.序列化模块

    序列化就是把其他的数据类型转化成字符串,bytes的过程

    1.json模块

    在内存中做数据转化:

          dumps数据类型转化成字符串  序列化

          loads字符串转成数据类型   反序列化

    dump  load  直接将数据类型写入文件,直接从文件中读出数据类型

    json是所有语言都通用的一种序列化格式,只支持列表,字典(字典的key必须是字符串),字符串,数

    2.pickle

    只能在python中使用,支持所有在python中几乎所有的数据类型

    dumps序列化的结果只能是字节,在和文件操作的时候,需要用rb,wb的模式打开文件

    可以多次dump和多次load

     6.re模块

    一.注意:

      永远不要起一个py文件的名字,这个名字和你已知的模块同名

    二正则表达式

      正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    三.正则表达式的运用

    1.字符组

      [0-9]  匹配的是[0123456789]的范围。

      [a-z]  匹配的是所有的小写字母。

      [A-Z]  表示所有的大写字母。

      [0-9a-fA-F]  可以匹配数字,大小写形式的a-f,用来验证十六进制字符。

    2.字符

      .  表示匹配除换行符以外的任意字符

      w  匹配字母或数字或下划线

      s  匹配任意空白符 (   space)

      d  匹配数字

         匹配一个换行符

         匹配一个制表符

        匹配一个单词的结尾

      ^  匹配字符串的开始

      $  匹配字符串的结尾

      W 匹配非字母或数字或下划线

      D  匹配非数字

      S   匹配非空白符

      a|b  匹配字符a或字符b

      ()  匹配括号内的表达式,也表示一个组

      [...]  匹配字符组中的字符

      [^...]  匹配除了字符组中字符的所有字符

    3.量词

      *  重复0次或者更多次

      +  重复一次或更多次

      ?  重复0次或者一次

      {n}  重复n次

      {n,}  重复n次或者更多次

      {n,m}  重复n到m次

    四.正则表达式特点

    1.贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

      .*  默认为贪婪匹配模式,会匹配尽量长的字符串

      .*?  加上?为将贪婪模式转为非贪婪模式,会匹配尽量短的字符串

    2.几个常用的非贪婪匹配的Pattern

      *?  重复任意次,但尽可能少重复

      +?  重复一次或更多次,但尽可能少重复

      ??  重复0次或1次,但尽可能少重复

      {n,m}?  重复n到m次,但尽可能少重复

      (n,)?  重复n次以上,但尽可能少重复

    .  *?的用法

      取尽量少的任意字符,一般不会这么单独写,他大多用在:.*?x就是取前面任意长度的字符,直到一个x出现

    五.re模块的使用

    引用  import re

    1.查找

    findall:匹配所有 每一项都是列表中的一个元素,返回列表

    import re
    ret = re.findall("d+","123xixi34haha56")
    print(ret)  #打印"123","34","56"

    2.

    search: 只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法来获取结果.

    如果没有匹配到,会返回None,使用group会报错.

    import re
    ret = re.search("d+","123xixi34haha56")
    print(ret.group())  #打印"123"

    3.

    match :从头开始匹配,相当于search中的正则表达式加一个^

    import re
    ret = re.match("d+","i123xixi34haha56")
    print(ret)   #打印None
    print(ret.group())  #group 报错

    4.字符串的处理扩展:替换,切割

    split  返回列表,按照正则规则切割,默认匹配到的内容会被切掉

    import re
    s = "1酸甜口2鲜香口3香辣味"
    ret = re.split("d",s)
    print(ret) #打印"酸甜口","鲜香口"."香辣味"

    5.sub #谁  旧的  新的  替换次数

    import re
    ret = re.sub("d","K","i123xixi34haha56",3)
    print(ret) #打印中"123"被替换为"KKK",如果语法中不加3,则默认数字全被替换味为"K"

    6. subn 返回一个元组,第二个元素是替换的次数

    import re
    ret = re.subn("d","K","i123xixi34haha56")
    print(ret)  #('iKKKxixiKKhahaKK', 7)

    7.re模块的进阶:时间/空间

    compile 节省使用正则表达式的时间

    编译正则表达式 →字节码,在多次使用的过程中,不用再多次编译.

    用这个结果去 search,match,findall,finditer 能都节省时间

    import re
    res = re.compile("d+")
    ret = res.findall("i123xixi34haha56")
    print(ret)
    ret = res.search("i123xixi34haha56")
    print(ret.group())

    finditer  节省使用正则表达式解决问题的空间/内存

    返回一个迭代器.所有结果都在这个迭代器中,需要通过循环+group的形式取值,能够节省内存.

    import re
    
    ret = re.finditer("d+","i123xixi34haha56")
    print(ret)  #打印内存地址
    for i in ret:
        print(i.group())  依次打印"123","34","56"
  • 相关阅读:
    构造函数以及四种方法的调用
    函数声明与函数表达式的区别
    display:inline-block,block,inline的区别与用法
    SASS 使用(vs code)
    SASS 使用(安装)
    vue 学习笔记1 入门
    ES6学习5 字符串的扩展
    ES6学习4 变量的解构赋值
    es6 学习2 模板字符
    es6 学习1 let表示变量 、const表示常量 与 var 变量的区别
  • 原文地址:https://www.cnblogs.com/liuqingyang/p/9506708.html
Copyright © 2020-2023  润新知