zoukankan      html  css  js  c++  java
  • python模块的概念

    在python中模块其实就是文件,当你把一段代码功能保存为一个文件的时候,放到特定的位置在需要的时候就可以import导入这个模块。

    关于部分内置模块:

    time模块:

    time模块是python解释器内置的一个模块,可以用来查看时间以及转换各种时间格式,其用途比较多。

    time模块有三种时间表示形式

    1:时间戳

    time.time()
    1970年开始走过的秒数,这是计算机用来记录时间的

    2:格式化字符串时间
    time.strftime('%Y-%m-%d %x')

    3:结构化时间
    time.localtime()
    tm_year,tm_mon,tm_mday,

    其转换顺序是:时间戳>>结构化时间>>格式化字符串时间

    random模块:

    有以下几个常用的函数

    random.random()#大于0且小于1的数字
    random.uniform(a, b),用于生成一个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。
    random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数
    random.randint(0,9)#生成指定范围的内的整数。
    random.choice([1,2,3,4,4,5])随机选择列表中的元素
    random.sample([1,2,3,4,5,6],2)#随机列表里的两个数字
    random.shuffle([1,2,3,4,5,6,8])#洗牌里面的数字

    一般可以用于一些随机性的时间,比如我们可以用来写个随机验证码生成器:

    import random
    def add():
        s = ''
        for i in range(5):
            x=random.randint(0,9)
            y=chr(random.randint(65,90))
            a=random.choice([x,y])
            s+=str(a)
        return s
    print(add())

    hashlib模块:

    哈希算法模块,这个模块一般用于md5验证


    #md5算法语法

    m=hashlib.md5()#md5('xxxx'.encode('utf8'))#括号里可以加入随机字符参数,进行进一步加密
    m.update('hello'.encode('utf8'))
    print(m.hexdigest())

    os模块

    这个模块一般用于调用系统的功能,比如最常用的就是文件夹操作

    语法有以下这些:

    os模块
    os模块是与操作系统交互的命令
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("C:\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所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小
    '''

    sys模块:


    sys.version#当前解释器版本
    sys.platform#当前操作系统
    sys.argv#用于shell命令解释器执行py文件时候后面空格分开跟上的参数的接收成一个列表,比如linx中执行文件的时候后面加入的参数,在内部可以用$1和$2来接收(第一个参数是文件名本身)
    sys.path#可以查看当前导入模块的时候找过的路径

    logging模块:

    关于日志模块,日志模块在程序中是比较常用的模块,如果要记录一些程序运行中的各种事件和异常的话,自己手动创建日志文本格式是一件非常麻烦的事情,这个时候就要用上日志模块了。

    日志模块有两种配置方式,congfig,logger

    #1congfig函数:

    语法细节

    import logging  
    logging.basicConfig(level=logging.DEBUG, #日志等级默认是warning
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  #日志格式
                        datefmt='%a, %d %b %Y %H:%M:%S',  #日期格式
                        filename='/tmp/test.log',  #文件名路径
                        filemode='w')  #模式w覆盖,a追加

    来看看日志格式都有哪些

    %(name)s Logger的名字
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    %(filename)s 调用日志输出函数的模块的文件名
    %(module)s 调用日志输出函数的模块名
    %(funcName)s 调用日志输出函数的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    %(thread)d 线程ID。可能没有
    %(threadName)s 线程名。可能没有
    %(process)d 进程ID。可能没有
    %(message)s用户输出的消息

    #2 logger函数

    语法细节

    import logging
    
    logger=logging.getlogger()  创建一个logging对象
    
    fh=logging.FileHandler('logger2')#文件流对象,默认是追加写
    sh=logging.StreamHandler()#输出屏幕流对象
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')#格式对象
    
    fh.setFormatter(formatter)文件流对象与格式链接
    sh.setFormatter(formatter)屏幕流对象与格式链接
    
    
    
    logger.addHandler(fh)然后和logger对象连接
    logger.addHandler(sh)
    
    logger.setlevel(logging.DEBUG)
    
    logger.debug('debug message')  
    logger.info('info message')  
    logger.warning('warning message')  
    logger.error('error message')  
    logger.critical('critical message')  

    序列化模块

    当一个python数据类型需要存储在文本中或者需要传送的时候,需要将数据转化为一个json类型,方保存和传送与随时可以提取拿来用

    json模块:

    json模块:
    语法:dumps
    import json

    d=['1','6','77','88']
    data=json.dumps(d)#将数据类型转换成json字符串,json语言
    data2=json.loads(data)#将数据反序列化


    语法二:dump写入文件的简单写法,必须要有文件对象
    with open('001.txt','w')as f
        json.dump(d,f)

    因为使用简单,不做过多讲述

    pickle模块:

      也是一种数据类型和json十一样的pickle数据类型只能由pytho自己读取,不能和别的语言相互沟通,不过pickle可以保存所有python数据类型,甚至是类,而json无法做到,其语法细节和json是一摸一样的。

    正则模块re:

    因为正则表达式过于复杂,这里只列出了一些常用的语法

    re.findall('正则表达式','操作对象')#可以将匹配的数据全部以列表的形式列出

    finditer:#与findall不同的是匹配的内容返回一个迭代器
    s=re.finiter('d+','ad324das32')

    s.__next__().group()取值

    ret=re.search('d+','djasasas34asd3')#只匹配第一个结果其余忽略
    print(ret.group)
    >>34

    #match只在字符串开始的位置匹配

    ret=re.match('d+','432jkjjjjhjh3')
    print(ret.group())
    >>432

    split#分割表达式,后面可以加上可选参数,来限定分割次数

    s2=re.split('d+','ddsdsd3232dsdsd2323dsdsd')
    >>['3232','2323']

    re.sub('d+','A','hello  234jkhh23')#替换表达式,将所有的数字替换为A

    re.subn('d+','A','hello  234jkhh23')#可以多返回一个替换次数

    ret6=re.compole('d+')#先编译好一个匹配规则对象
    c=ret6.findall(‘hell22dsds2332’)
    print(c)
    >>['22','2332']

    正则表达式元字符
     
     .     任意符号除换行符( )
    重复元素:
    *     [0,无穷个]
    +    1到无穷个
    ?    0到1次
    {num}    在括号内指定次数   
    {start,stop}范围次数

    [ ]:字符集:
    在字符集内几乎所有特殊字符都变普通字符
    除了[1-9]中的代表1到9范围内的任意一个数字还有(- ^ )
    当字符集内开头有个尖角号的时候[^0-9]就是取反的意思,这个意思是取不是数字的元素
    re.findall('a[bd]c','abcsjsjsjsjsadc')
    >>['abc','adc']

    ():分组:
    (?:)括号内加入?:可以取消先显示括号内的内容的优先级

    print(re.findall('(ad)+','addd'))
    >>['ad']

    print(re.findall('(?:ad)+yuan','adadyuangfsdsd'))
    >>['adadyuan']

    print(re.findall('www.(?:oldboy|baidu).com','www.oldboy.com'))#逻辑或符号“|”可以匹配左边的或者右边的

    开始匹配 和结尾匹配
      ^                 $

    转义字符
    d ?匹配任何十进制数;它相当于类 [0-9]。
    D 匹配任何非数字字符;它相当于类 [^0-9]。
    s ?匹配任何空白字符;它相当于类 [ fv]。
    S 匹配任何非空白字符;它相当于类 [^ fv]。
    w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
     ?匹配一个特殊字符边界,比如空格 ,&,#等

    #命名分组:

    可以将分组命名并可以指定取得对象

    ret8=re.search(r'(?p<A>w+)\aticles\(?p<id>d{4})',r'yuanaticles1234')
    print(ret8.group('A'))
    print(ret8.group('id'))

    剩下补充:

    贪婪匹配
    print(re.findall('d+','af53432huh2342hhoijo2'))

    非贪婪匹配
    print(re.findall('d+?','af53432huh2342hhoijo2'))

    如何忽略大小写,re.I(大写的i)

  • 相关阅读:
    java通过ST4使用模板字符串
    使用 docker创建redis实例并且连接
    Docker 认证成功后还是无法push构建好的镜像
    记录一次在openwrt中折腾docker
    全局模式、PAC模式、直连模式的区别
    Vue Router中调用this.$router.push() 时,location使用path无法传入params
    liunx之系统
    liunx之通配符&正则表达式
    liunx之基础
    liunx之find命令
  • 原文地址:https://www.cnblogs.com/crischou/p/6768877.html
Copyright © 2011-2022 走看看