zoukankan      html  css  js  c++  java
  • Python之模块(三 )

    re 模块

    就其本质而言,正则表达式(或RE)是一种小型的,高度专业化的编程语言,(在python中)它内嵌在python在,并通过re模块实现。

    正则表达式模块被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

    正则就是是对字符串处理。

    字符匹配(普通字符,元字符):

    1. 普通字符,大多数字符和字母都会和自身匹配

        >>>re.findall("alvin","yuanaleSxalvinwupeiqi")

          ["alvin"]

    2. 元字符:  .^$*+?{}[]|()

     1 import re
     2 
     3 #---------------元字符   . ^ $ * + ? {}
     4 ret = re.findall('a..in',"helloassinsdfakjksjdfin") #   .通配符
     5 print(ret) #['assin']
     6 
     7 ret = re.findall("^a..in","assinhelloassinsdfakjkfin") # ^以什么开头
     8 print(ret) #['assin']
     9 
    10 ret = re.findall("a..in$","assinhellosdfakjin") # $以什么结尾
    11 print(ret) #['akjin']
    12 
    13 ret = re.findall("d*","abcdddddddefgh") # * 匹配0-无穷次的内容 贪婪匹配(尽可能多的匹配)
    14 print(ret) #['', '', '', 'ddddddd', '', '', '', '', '']
    15 ret = re.findall("abcd*","abcefgh")
    16 print(ret) #['ddddddd'] #['abc']
    17 
    18 ret = re.findall("d+","abcdddddddefgh") # + 匹配1-无穷次的内容 贪婪匹配
    19 print(ret) #['ddddddd'] #['ddddddd']
    20 
    21 ret = re.findall("abcd?","abcdddddddefgh") # ? 匹配(0,1)次 贪婪匹配
    22 print(ret) #['abcd']
    23 
    24 ret = re.findall("abcd{0,4}","abcdddddddefgh") # {a,b} 匹配{a---->b}次 (尽可能多的匹配)
    25 print(ret) #['abcdddd']
    26 
    27 ret = re.findall("abcd*?","abcdddddddefgh") # 在 *,+,?  后面再加上?变成惰性匹配取最少的
    28 print(ret) #['abc']
    29 
    30 #-------------------------元字符  []
    31 
    32 ret = re.findall("x[y,z]p","xypabcxzpdefx,p") #[] 以或的形式一一批配
    33 print(ret) #['xyp', 'xzp', 'x,p']
    34 
    35 ret = re.findall("x[y*z]p","xyyyypabcxzpdefx,p") #[] 以或的形式一一批配* + ?在[]里没用
    36 print(ret) #['xzp']
    37 
    38 #元字符[]里有特殊功能的符号 - ^ 
    39 ret = re.findall("q[a-z]*","qxypabcxzpdefx,q8") #  - :[a-b] 以或的形式 批配在a--->b 内容  ASCII码中的顺序
    40 print(ret) #['qxypabcxzpdefx', 'q']
    41 
    42 ret = re.findall("q[^a-z]*","qxypabcxzpdefx,q8") # ^  :[^a-b] 以或的形式 批配在a--->b 之外的内容  ASCII码中的顺序
    43 print(ret) #['q', 'q8']
    44 
    45 #-----------------------元字符    
    46 
    47 '''
    48 反斜杠后面跟元字符去掉特殊功能如 如 .
    49 反斜杠后面跟普通字符实现特殊功能 如 d
    50 
    51 d 匹配任何十进制数;相当于[0-9]
    52 D 匹配任何非数字字符;相当于[^0-9]
    53 s 匹配任何空白字符;相当于[	
    
    fv]
    54 S 匹配任何非空白字符;相当于[^	
    
    fv]
    55 w 匹配任何字母数字字符;相当于[a-zA-Z0-9]
    56 W 匹配任何非字母数字字符;相当于[^a-zA-Z0-9]
    57  匹配一个特殊字符边界,如空格,&,#等
    58 '''
    59 ret = re.findall("d","sdf21sdf545")
    60 print(ret) #['2', '1', '5', '4', '5']
    61 ret = re.findall("D","sdf21sdf545")
    62 print(ret) #['s', 'd', 'f', 's', 'd', 'f']
    63 ret = re.findall("s","hello word")
    64 print(ret) #[' ']
    65 ret = re.findall("S","hello word")
    66 print(ret) #['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd']
    67 
    68 #---------------------转义字符
    69 ret = re.findall(r"I","hello I am LIST")  # r 原生字符,python解析器中"I"不做任何转义,直接传给re
    70 print(ret) #['I']
    71 
    72 ret = re.findall("I\b","hello I am LIST")  # \去掉python解析器中的特殊意义
    73 print(ret) #['I']
    74 
    75 ret = re.findall("c\\g","abcglerwt")  # \去掉python解析器中的特殊意义 --->在re中 得到"c\g",\去掉re中的特殊意义
    76 print(ret) #['c\g']   \  ------>  
    77 
    78 
    79 #-----------------管道符  |
    80 ret = re.findall("ka|bs","sdfkabsdf")  #
    81 print(ret) #['ka', 'bs']
    82 
    83 #--------------------- 分组()
    84 ret = re.findall("(abc)+","abcabcabc")
    85 print(ret) #['abc']
    86 ret = re.findall("(?:abc)+","abcabcabc")  #取消优先级
    87 print(ret) #['abcabcabc']
    88 
    89 # re.search返回的是一个对象
    90 ret = re.search("(?P<name>[a-z]+)(?P<age>d+)","abc18def20")  # ?P固定格式<name> 做了个分组,名字叫name
    91 print(ret.group())#调用值用group  #abc18
    92 print(ret.group("name"))#abc
    93 print(ret.group("age"))#18
    94 
    95 #--------------取消优先级  ?:
    96 ret = re.findall("www.(baidu|163).com","abcwww.baidu.comdef")
    97 print(ret) #['baidu']
    98 ret = re.findall("www.(?:baidu|163).com","abcwww.baidu.comdef")
    99 print(ret) #['www.baidu.com']
    View Code

    re 模块的方法:

     1 import re
     2 #------------------------re 模块的方法
     3 
     4 ret = re.findall("a","abac")  #返回所有满足条件的值放在一个列表里
     5 print(ret)
     6 
     7 ret = re.search("a","abac") #函数只找第一个匹配成功的然后返回一个对象
     8 print(ret) #<_sre.SRE_Match object; span=(0, 1), match='a'>
     9 print(ret.group())  #通过group 得到匹配的值
    10 
    11 ret = re.match("a","babac")  #同search,不过只在字符串开始处进行匹配
    12 print(ret)  #None
    13 
    14 ret = re.split("[ab]","abcd")  #按照[ab]  分割先按a 分割成'',bcd; bcd再按b分割
    15 print(ret)  #['', '', 'cd']
    16 
    17 
    18 ret = re.sub("d+","A","abc123abc123",1) #替换  最后一个参数匹配次数
    19 print(ret) #abcAabc123
    20 ret = re.subn("d+","A","abc123abc123",1) #替换
    21 print(ret) #('abcAabc123', 1)  最后一个参数匹配次数
    22 
    23 obj = re.compile("d+")  #定义一个规则
    24 ret = obj.findall("abc123abc123")
    25 print(ret) #['123', '123']
    26 
    27 ret = re.finditer("d","a1a1a1a1a1a1")  #返回所有满足条件的值放在一个迭代器里
    28 print(ret) #<callable_iterator object at 0x0000016BAC4CADA0>
    29 print(next(ret).group()) #  1
    View Code

     logging 模块

    # =================logging.basicConfig()
     1 import logging
     2 
     3 logging.basicConfig(
     4     level=logging.DEBUG,
     5     filename="logger.log",
     6     filemode="w",
     7     format="%(asctime)s %(filename)s [%(lineno)d] %(message)s"
     8 )
     9 
    10 logging.debug("debug message")
    11 logging.info("info message")
    12 logging.warning("warning message")
    13 logging.error("error message")
    14 logging.critical("critical message")
    15 
    16 """logging.basicConfig()函数中的可用参数
    17 filenema:用指定的文件名创建FileHandle,这样日志会被储存在指定文件中
    18 filemode:文件打开方式,默认为“a”
    19 format:指定handle使用的日志显示格式
    20 datefmt:指定日期时间格式
    21 level:设置rootlogger的日志级别
    22 stream:指定stream创建StreamHandle。如果filename和stream两个参数同时列出,则stream参数会被忽略
    23 
    24 """
    25 
    26 ''' format 参数可能用到的格式化串
    27 %(name)s    Logger的名字
    28 %(levelno)s   数字形式的日志级别
    29 %(levelname)s 文本形式的日志级别
    30 %(pathname)s  调用日志输出函数模块的完整路径名
    31 %(filename)s  调用日志输出函数的模块文件名
    32 %(module)s    调用输出日志函数的模块名
    33 %(funcName)s  调用日志输出函数的函数名
    34 %(lineno)d    调用日志输出函数的语句所在的代码行
    35 %(created)f   当前时间,用UNIX标准时间的浮点数表示
    36 %(asctime)s   字符串形式的当前时间
    37 %(message)s   用户输入的消息
    38 '''
    View Code
    # =================logger
     1 import logging
     2 # =================logger
     3 logger = logging.getLogger()
     4 
     5 fh = logging.FileHandler("test_log")
     6 ch = logging.StreamHandler()
     7 
     8 fm = logging.Formatter("%(asctime)s %(message)s")
     9 
    10 fh.setFormatter(fm)
    11 ch.setFormatter(fm)
    12 
    13 logger.addHandler(fh)
    14 logger.addHandler(ch)
    15 
    16 logger.setLevel("DEBUG")
    17 #====================
    18 
    19 logger.debug("debug message")
    20 logger.info("info message")
    21 logger.warning("warning message")
    22 logger.error("error message")
    23 logger.critical("critical message")
    View Code

    configparser 模块

    常见文档格式

    [DEFAULT]
    serveraliveinterval = 45
    forwardxll = yes
    compressionlevel = 9
    compression = yes
    
    [bitbucket.org]
    user = hg
    
    [topsecret.server.com]
    host port = 50022
    forwardxll = yes

    生成一个这样的文档:

     1 import configparser
     2 
     3 config = configparser.ConfigParser()   #-------->config=[]
     4 config["DEFAULT"]={
     5     "ServerAliveInterval" : '45',
     6     "Compression" : 'yes',
     7     "CompressionLevel" : '9',
     8     "ForwardXll" : 'yes'
     9 }
    10 
    11 config['bitbucket.org'] = {}
    12 config["bitbucket.org"]['User']='hg'
    13 config['topsecret.server.com']={}
    14 topsecret = config['topsecret.server.com']
    15 topsecret["Host Port"] = "50022"
    16 topsecret["ForwardXll"] = "yes"
    17 
    18 with open('example.ini',"w") as f:
    19     config.write(f)
    20 
    21 #------------------------增删改查
    22 import configparser
    23 
    24 config = configparser.ConfigParser()
    25 
    26 #----------查
    27 print(config.sections())  #[]
    28 config.read("example.ini")
    29 print(config.sections())  #['bitbucket.org', 'topsecret.server.com']
    30 print(config["bitbucket.org"]["User"])  #hg
    31 
    32 for key in config["bitbucket.org"]:
    33     print(key)
    34 """user
    35 compressionlevel
    36 serveraliveinterval
    37 forwardxll
    38 compression"""
    39 
    40 print(config.options("bitbucket.org")) #['user', 'compressionlevel', 'serveraliveinterval', 'forwardxll', 'compression']
    41 print(config.items("bitbucket.org"))
    42 #[('compressionlevel', '9'), ('serveraliveinterval', '45'), ('forwardxll', 'yes'), ('compression', 'yes'), ('user', 'hg')]
    43 
    44 print(config.get("bitbucket.org","User"))  #hg
    45 
    46 #------------------------增,删,改
    47 
    48 config.add_section("yuan")
    49 config.set("yuan","k1","10")
    50 
    51 config.remove_section("topsecret.server.com")
    52 config.remove_option("bitbucket.org","User")
    53 
    54 
    55 config.write(open("i.cfg","w"))
    View Code

    hashlib 模块

    用于加密的相关操作: 主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法,用法差不多

    不能反解

     1 import hashlib
     2 
     3 obj=hashlib.md5()
     4 
     5 obj.update("hello".encode("utf8"))
     6 print(obj.hexdigest())  #5d41402abc4b2a76b9719d911017c592
     7 
     8 obj.update("root".encode("utf8"))
     9 print(obj.hexdigest())  #e206121dbbe984f3bc6c6448846ed8cd
    10 
    11 md5=hashlib.md5()
    12 md5.update("helloroot".encode("utf8"))
    13 print(obj.hexdigest())  #e206121dbbe984f3bc6c6448846ed8cd
    14 
    15 hash = hashlib.sha256("abc".encoding("utf8"))
    16 hash.update("hello".encode("utf8")) 
    17 print(hash.hexdigest()) #2cb9c710242d0e384bb068a76a664a10f3970c7e81d58059378cfd5f5ba12b0f
  • 相关阅读:
    open stack总结
    Nginx操作命令
    Nginx 配置详解
    Linux 常用命令-- top
    CEPH 使用SSD日志盘+SATA数据盘, 随OSD数目递增对性能影响的递增测试
    MyCat水平分库
    MyCat垂直分库
    MyCat基本知识
    utf8mb4复杂昵称问题
    Power安装linux-BIG ENDIAN mysql编译安装
  • 原文地址:https://www.cnblogs.com/kaixindexiaocao/p/9822924.html
Copyright © 2011-2022 走看看