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
  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/kaixindexiaocao/p/9822924.html
Copyright © 2011-2022 走看看