• 模块一


    模块

    模块..................................................................................................................................... 1

    1.      os模块......................................................................................................................... 2

    2.      sys模块........................................................................................................................ 4

    3.      time模块..................................................................................................................... 5

    4.      random模块................................................................................................................ 9

    5.      序列化模块................................................................................................................ 12

    6.      collections模块......................................................................................................... 14

    7.      re模块....................................................................................................................... 16


     

    1.       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.popen("bash command).read()  运行shell命令,获取执行结果

    os.environ  获取系统环境变量

     

     

    os.path

    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所指向的文件或者目录的最后修改时间

    os.path.getsize(path) 返回path的大小

    '''

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

    os.stat('path/filename')  获取文件/目录信息 的结构说明

     

    stat 结构:

     

    st_mode: inode 保护模式

    st_ino: inode 节点号。

    st_dev: inode 驻留的设备。

    st_nlink: inode 的链接数。

    st_uid: 所有者的用户ID。

    st_gid: 所有者的组ID。

    st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。

    st_atime: 上次访问的时间。

    st_mtime: 最后一次修改的时间。

    st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

     

    stat 结构

    2.       sys模块

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

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

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

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

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

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

    异常处理和status

     

    import sys

    try:

        sys.exit(1)

    except SystemExit as e:

        print(e)

    3.       time模块

    常用方法

    time.sleep(secs)

    (线程)推迟指定的时间运行。单位为秒。

    time.time()

    获取当前时间戳

    表示时间的三种方式

    时间戳

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

    元组(struct_time)

    struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

     

    格式化的时间字符串

     

    %y 两位数的年份表示(00-99)

    %Y 四位数的年份表示(000-9999)

    %m 月份(01-12)

    %d 月内中的一天(0-31)

    %H 24小时制小时数(0-23)

    %I 12小时制小时数(01-12)

    %M 分钟数(00=59)

    %S 秒(00-59)

    %a 本地简化星期名称

    %A 本地完整星期名称

    %b 本地简化的月份名称

    %B 本地完整的月份名称

    %c 本地相应的日期表示和时间表示

    %j 年内的一天(001-366)

    %p 本地A.M.或P.M.的等价符

    %U 一年中的星期数(00-53)星期天为星期的开始

    %w 星期(0-6),星期天为星期的开始

    %W 一年中的星期数(00-53)星期一为星期的开始

    %x 本地相应的日期表示

    %X 本地相应的时间表示

    %Z 当前时区的名称

    %% %号本身

     

    python中时间日期格式化符号:

    时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

    几种格式之间的转换

     

    重点代码

    计算时间差

     

    import time

    true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))

    time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))

    dif_time=time_now-true_time

    struct_time=time.gmtime(dif_time)

    print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,

                                           struct_time.tm_mday-1,struct_time.tm_hour,

                                           struct_time.tm_min,struct_time.tm_sec))

     

    计算时间差

    4.       random模块

    #随机小数

    random.random()      # 大于0且小于1之间的小数

    random.uniform(1,3) #大于1小于3的小数

    #随机整数

    >>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数

    >>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数

    #随机选择一个返回

    random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]

    #随机选择多个返回,返回的个数为函数的第二个参数

    random.sample([1,'23',[4,5]],2) # #列表元素任意2个组合

    #打乱列表顺序

    random.shuffle(item) # 打乱次序

    重点代码生成随机验证码

     

    import random

     

    def v_code():

     

        code = ''

        for i in range(5):

     

            num=random.randint(0,9)

            alf=chr(random.randint(65,90))

            add=random.choice([num,alf])

            code="".join([code,str(add)])

     

        return code

     

    print(v_code())

     

    生成验证码

    5.       序列化模块

    将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。

    序列化的目的

    1、以某种存储形式使自定义对象持久化;

    2、将对象从一个地方传递到另一个地方。

    3、使程序更具维护性。

     

    Json模块提供了四个功能:dumps、dump、loads、load

     

    import json

    dic = {'k1':'v1','k2':'v2','k3':'v3'}

    str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串

    print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}

    #注意,json转换完的字符串类型的字典中的字符串是由""表示的

     

    dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典

    #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示

    print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

     

     

    list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]

    str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型

    print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]

    list_dic2 = json.loads(str_dic)

    print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]

     

    loads和dumps

    import json

    f = open('json_file','w')

    dic = {'k1':'v1','k2':'v2','k3':'v3'}

    json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件

    f.close()

     

    f = open('json_file')

    dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回

    f.close()

    print(type(dic2),dic2)

     

    load和dump

    json & pickle 模块

    json,用于字符串 和 python数据类型间进行转换

    pickle,用于python特有的类型 和 python的数据类型间进行转换

    6.       collections模块

    扩展的数据类型

    namedtuple

    生成可以使用名字来访问元素内容的tuple

    queue

    先进先出

    deque

    双向队列

    双端队列,可以快速的从另外一侧追加和推出对象

    defaultdict

    有序字典

    OrderedDict

    带有默认值的字典

    Counter

    计数器,主要用来计数

    7.       re模块

    正则表达式

    常用匹配符

    d+    可以匹配多个数字

    d+?   可以匹配一部分数字(一组)

    ^      匹配行首

    $      匹配行尾

    ^d    第一个必须为数字

    d$    最后一个必须为数字

    s     匹配一个空格

    d{3,8}          匹配3-8个数字

    [0-9a-zA-Z\_]    可以匹配一个数字、字母或者下划线;

    [0-9a-zA-Z\_]+   可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;

    [a-zA-Z\_][0-9a-zA-Z\_]*   可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

    [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}   更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

    .    匹配任意个字符

    *    匹配任意个字符(包括0个)

    ?   匹配0个或1个字符

    +    匹配至少一个字符

    {n}      n个字符

    {n,m}    n-m个字符

    入门到精通

    基础

    • '00d' 可以匹配 '007' ,但无法匹配 '00A' ;
    • 'ddd' 可以匹配 '010' ;
    • 'wwd' 可以匹配 'py3' ;
    . 可以匹配任意字符,所以:
    • 'py.' 可以匹配 'pya' 、 'pyb' 、 'py!' 等等。
    要匹配变长的字符,在正则表达式中,用 * 表示任意个字符(包括0个),用 + 表示至少一个字符,用 ? 表示0个或1个字符,用 {n} 表示n个字符,用 {n,m} 表示n-m个字符:(• '00d' 可以匹配 '007' ,但无法匹配 '00A' ;, • 'ddd' 可以匹配 '010' ;, • 'wwd' 可以匹配 'py3' ;, . 可以匹配任意字符,所以: , • 'py.' 可以匹配 'pya' 、 'pyb' 、 'py!' 等等。 )

    强化

    • [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线;
    • [0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如 'a100' , '0_Z' , 'Py3000' 等等;
    • [a-zA-Z\_][0-9a-zA-Z\_]* 可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
    • [a-zA-Z\_][0-9a-zA-Z\_]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
    A|B 可以匹配A或B,所以 (P|p)ython 可以匹配 'Python' 或者 'python' 。
    ^ 表示行的开头, ^d 表示必须以数字开头。
    $ 表示行的结束, d$ 表示必须以数字结束。
    要做更精确地匹配,可以用 [] 表示范围(• [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线;, • [0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或者下划线组成的字符串,比如 'a100' , '0_Z' , 'Py3000' 等等;, • [a-zA-Z\_][0-9a-zA-Z\_]* 可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;, • [a-zA-Z\_][0-9a-zA-Z\_]{0, 19} 更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。, A|B 可以匹配A或B,所以 (P|p)ython 可以匹配 'Python' 或者 'python' 。, ^ 表示行的开头, ^d 表示必须以数字开头。, $ 表示行的结束, d$ 表示必须以数字结束。)

    re模块

    强烈建议使用Python的 r 前缀,就不用考虑转义的问题了

     

    match() 方法判断是否匹配,如果匹配成功,返回一个 Match 对象,否则返回 None

     

    切分字符串

    用正则表达式切分字符串比用固定的字符更灵活

     

    分组

    正则表达式还有提取子串的强大功能。用 () 表示的就是要提取的分组(Group)

     

    贪婪匹配

    正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

     
    由于d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

    必须让 d+ 采用非贪婪匹配(也就是尽可能少匹配),才能把后面的 0 匹配出来,加个 ? 就可以让 d+ 采用非贪婪匹配:

     

    编译

    在Python中使用正则表达式时,re模块内部会干两件事情

    1.编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
    2.用编译后的正则表达式去匹配字符串。

    编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。

     

    search 找到一个就返回,最多只匹配一个。findAll可返回多个、match的话从第一个个字符开始匹配,search则是全文

    finditer返回一个存放匹配结果的迭代器,节省空间;compile将正则表达式编译成为一个正则表达式对象,节省时间

  • 相关阅读:
    httpclient在获取response的entity时报异常
    SpringCloud项目,接口调用返回http 500
    使用maven插件生成grpc所需要的Java代码
    win10 无法修改默认程序 默认打开方式的解决方法
    mock.js中新增测试接口无效,返回404
    echarts的pie图中,各区块颜色的调整
    HashMap源码注释翻译
    netty学习记录2
    netty学习记录1
    Java-JNA使用心得2
  • 原文地址:https://www.cnblogs.com/changwentao/p/9073739.html
Copyright © 2020-2023  润新知