1、re:

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

2、findall 全部找到返回一个列表:

  1. s = "alex,meet,eva_j"
    import re
    print(re.findall('e',s)) # 参数1:要查找的内容,参数2:从哪查找,3、返回结果是列表的形式
    结果:['e', 'e', 'e', 'e']
    3\w 匹配中文,字母,数字,下划线:
  1. import re
    s = "alex1!,你哈t2,eva_j@!"
    print(re.findall("\w",s)) # 匹配字母(包含中文)或数字或下划线 ***
    结果:['a', 'l', 'e', 'x', '1', '你', '哈', 't', '2', 'e', 'v', 'a', '_', 'j']
    4\W 不匹配中文,字母,数字,下划线:
  1. import re
    s = "alex1!,你哈t2,eva_j@!"
    print(re.findall("\W",s)) # 匹配非字母(包含中文)或数字或下划线 ***
    结果:['!', ',', ',', '@', '!']
  1. 5\s 匹配任意的空白符:
  1. import re
    s = " zhangda@, "
    print(re.findall("\s",s)) # 匹配任意空白符
    结果:[' ', ' ']
    6\S 匹配不是任意的空白符:
  1. import re
    s = " zhangda@, "
    print(re.findall("\S",s)) # 匹配任意非空白符包含特殊符号 ***
    结果:['z', 'h', 'a', 'n', 'g', 'd', 'a', '@', ',']
    7\d 匹配数字:
  1. import re
    s = " 123zhangda@, "
    print(re.findall('\d',s)) # 匹配数字 ***
    结果:['1', '2', '3']
    8\D 匹配非数字:
  1. import re
    s = " 123zhangda@, "
    print(re.findall('\D',s))
    结果:[' ', 'z', 'h', 'a', 'n', 'g', 'd', 'a', '@', ',', ' ']
    9、从字符串开头匹配:
  1. import re
    s = "Adsasf"
    print(re.findall("\AA",s)) #\A从字符串开头匹配、从字符串开头匹配没有就返回空列表
    结果:['A']
  1. 10、^匹配字符串的开始:
  1. import re
    s = "Adsasf"
    print(re.findall("^A",s)) # 匹配开头没有就返回空列表 ***
    结果:['A']
    11\Z匹配字符串的结束,如果是换行,只匹配到换行前的结果:
  1. import re
    s = "Adsasf"
    print(re.findall("f\Z",s))
    结果:['f']
    12\$匹配字符串的结尾:
  1. import re
    s = "Adsasf"
    print(re.findall("f$",s)) # 匹配结尾 ***
    结果:['f']
    13、.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
  1. import re
    s = "!@#$5%0,1,2AAAA,113,-4,5,-6,7,9alex_meet\n"
    print(re.findall(".",s)) # 匹配任意字符串(换行和制表符除外) ***
    结果:['!', '@', '#', '$', '5', '%', '0', ',', '1', ',', '2', 'A', 'A', 'A', 'A', ',', '1', '1', '3', ',', '-', '4', ',', '5', ',', '-', '6', ',', '7', ',', '9', 'a', 'l', 'e', 'x', '_', 'm', 'e', 'e', 't']
  1. print(re.findall(".",s,re.DOTALL))
    结果:['!', '@', '#', '$', '5', '%', '0', ',', '1', ',', '2', 'A', 'A', 'A', 'A', ',', '1', '1', '3', ',', '-', '4', ',', '5', ',', '-', '6', ',', '7', ',', '9', 'a', 'l', 'e', 'x', '_', 'm', 'e', 'e', 't', '\n']
    14、[...]匹配字符组中的字符:
  1. import re
    s = "!@#$5%0,1,2AAAA,113,-4,5,-6,7,9alex_meet\n"
    print(re.findall("[0-9a-zA-Z]",s)) # [数字0-数字9和字母a-z和A-Z]
    结果:['5', '0', '1', '2', 'A', 'A', 'A', 'A', '1', '1', '3', '4', '5', '6', '7', '9', 'a', 'l', 'e', 'x', 'm', 'e', 'e', 't']
  1. import re
    s = "!@#$5%0,1,2AAAA,113,-4,5,-6,7,9alex_meet\n"
    print(re.findall("[0-9]",s)) # [数字0-数字9]
    结果:['5', '0', '1', '2', '1', '1', '3', '4', '5', '6', '7', '9']
    15、*匹配0个或者多个左边的字符 贪婪匹配方式:
  1. import re
    s = "aleex1.!,你哈t2,eev11a_j@!1111"
    print(re.findall("a*",s))
    结果:['a', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a', '', '', '', '', '', '', '', '', '']
    16、+匹配一个或者多个左边的字符贪婪匹配方式
  1. import re
    s = "aleex1.!,你哈t2,eev11a_j@!1111"
    print(re.findall("a+",s))
    结果:['a', 'a']
    17、?匹配0个或者1个左边的字符,非贪婪方式:
  1. import re
    s = "aleex1.!,你哈t2,eev11a_j@!1111"
    print(re.findall("a?",s))
    结果:['a', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a', '', '', '', '', '', '', '', '', '']
    18、{n}精准匹配n个前面的表达式:
  1. import re
    s1 = "aleex1.!,你哈t2,eev11a_j@!1111"
    print(re.findall("e{2}",s1)) # 精确
    print(re.findall("ee",s1))
    结果:['ee', 'ee']
    19、{n,m}匹配nm次由前面的正则表达式定义的片段,贪婪方式:
  1. import re
    s1 = "aleex1.!,你哈t2,eev11a_j@!1111"
    print(re.findall('e{0,3}',s1)) # 范围
    结果:['', '', 'ee', '', '', '', '', '', '', '', '', '', '', 'ee', '', '', '', '', '', '', '', '', '', '', '', '', '']
    20a|b 匹配a或者b
  1. import re
    s1 = "alea121meeeeeeeet11123,wusir324"
    print(re.findall("a|e",s1)) # 或
    结果:['a', 'e', 'a', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e']
    21、() 匹配括号内的表达式,也表示一个组:
  1. import re
    s1 = "alea121meeeeeeeet11123,wusir324"
    print(re.findall("e(e)e",s1)) # 分组
    print(re.findall("m(eee)e",s1)) # 分组
    print(re.findall("e(?:e)e",s1)) # 分组
    结果: ['e', 'e']

    ['eee']
    ['eee', 'eee']

22、找到所有带_sb的内容:

  1. s = 'alex_sb wusir_sb 的 alex wusir '
    import re
    print(re.findall("(.*)_sb",s))
    print(re.findall("(.+?)_sb",s)) # .... * 0 or .... 1
    print(re.findall("(.............)_sb",s))
    结果: ['alex_sb wusir']

    ['alex', ' wusir']
    ['alex_sb wusir']

23、\d匹配数字:

  1. import re
    s1 = "1-2*(60+(-40.35/5)-(-4*3))"
    print(re.findall("\d+",s1))
    结果:['1', '2', '60', '40', '35', '5', '4', '3']
    24\. == 转义成普通的小数点:
  1. import re
    s1 = "1-2*(60+(-40.35/5)-(-4*3))"
    print(re.findall("\d+\.\d+|\d+",s1))
    结果:['1', '2', '60', '40.35', '5', '4', '3']
    25、匹配所有的数字(包含小数包含负号):
  1. print(re.findall("-\d+\.\d+|-\d+|\d+",s1))
    结果:['1', '-2', '60', '-40.35', '5', '-4', '3']
    26、匹配所有邮箱:
  1. import re
    s2 = "http://blog.csdn.net/make164492212@163.com/article/details/51656638" # 匹配所有邮箱
    print(re.findall('\w+@\d+\.com',s2))
    结果:['make164492212@163.com']
    27、匹配qq号:腾讯从10000开始:
  1. import re
    s6 = "1231231,324233,123,1123,2435,1234,2546,23451324,3546354,13241234"
    print(re.findall('\d{5,11}',s6))
    结果:['1231231', '324233', '23451324', '3546354', '13241234']
    28searchmatch
  1. search ***** # 从字符串任意位置进行匹配,查找到一个就停止了
    match ***** # 从字符串开始位置进行匹配,找不返回None
    29split分割:
  1. import re
    print(re.split('[ ::,;;,]','alex wusir,日天,太白;女神;肖锋:吴超'))
    结果:['alex', 'wusir', '日天', '太白', '女神', '肖锋', '吴超']
    30sub替换:
  1. import re
    s = 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'
    print(re.sub('barry', 'meet',s))
    结果:meet是最好的讲师,meet就是一个普通老师,请不要将meet当男神对待。
    31compile 定义匹配规则:
  1. import re
    obj = re.compile('\d{2}')
    print(obj.findall("alex12345"))
    结果:['12', '34']
    32、给分组起名字:
  1. import re
    s = "<h1>hello</h1>"
    print(re.findall("<(\w+)>",s))
    结果:h1
    33logging模块:
  1. logging -- 日志
    1.记录程序运行状态
    # 时间,那个文件,报错行数,错误信息
    2.用户的喜好
    # 分析用户的一些喜好,操作
    3.银行
    # 账户的一些流水

我们来说一下这个logging模块,这个模块的功能是记录我们软件的各种状态,你们现在和我一起找到红蜘蛛的那个图标,然后右键找一找是不是有个错误日志.其实每个软件都是有错误日志的,开发人员可以通过错误日志中的内容对他的程序进行修改

这只是一种应用场景,有的还会将日志用于交易记录.比如你给我转账应该做记录吧,

我们使用的信用卡,每消费的一笔都会记录,我们来看看这个日志怎么用?

我们先来看一下函数式简单配置

  1. import logging
  2. logging.debug('debug message')
  3. logging.info('info message')
  4. logging.warning('warning message')
  5. logging.error('error message')
  6. logging.critical('critical message')

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING

(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),

默认的日志格式为日志级别:Logger名称:用户输出消息。

我们自己用函数写的这个可以正常使用但是不够灵活,我们看看这个灵活的

灵活配置日志级别,日志格式,输出位置:

  1. import logging
  2. logging.basicConfig(level=logging.DEBUG,
  3. format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  4. datefmt='%a, %d %b %Y %H:%M:%S',
  5. filename='/tmp/test.log',
  6. filemode='w')
  7. logging.debug('debug message')
  8. logging.info('info message')
  9. logging.warning('warning message')
  10. logging.error('error message')
  11. logging.critical('critical message')
  1. logging.debug("这是调试")
    logging.info("这是信息")
    logging.warning("这是警告")
    logging.error("这是错误")
    logging.critical("这是危险")

basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

  • filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
  • filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
  • format:指定handler使用的日志显示格式。
  • datefmt:指定日期时间格式。
  • level:设置记录日志的级别
  • stream:用指定的stream创建StreamHandler。可以指定输出到
  • sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:

  • %(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用户输出的消息

logger对象配置

  1. import logging
  2. logger = logging.getLogger()
  3. # 创建一个handler,用于写入日志文件
  4. fh = logging.FileHandler('test.log',encoding='utf-8')
  5. # 再创建一个handler,用于输出到控制台
  6. ch = logging.StreamHandler()
  7. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  8. fh.setLevel(logging.DEBUG)
  9. fh.setFormatter(formatter)
  10. ch.setFormatter(formatter)
  11. logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
  12. logger.addHandler(ch)
  13. logger.debug('logger debug message')
  14. logger.info('logger info message')
  15. logger.warning('logger warning message')
  16. logger.error('logger error message')
  17. logger.critical('logger critical message')

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过

fh.setLevel(logging.Debug)单对文件流设置某个级别。

  1. import logging
    looger = logging.getLogger() # 创建一个空架子
    fh = logging.FileHandler('test1.log',mode="a",encoding="utf-8")
    # 创建一个文件句柄,用来记录日志(文件流)
    ch = logging.StreamHandler()
    # 创建一个屏幕流,打印记录的内容
    f_str = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(filename)s %(lineno)s %(message)s")
    # 定义一个记录日志的格式
    looger.level = 10
    # 设置一个记录级别
    fh.setFormatter(f_str) # 给文件句柄设置记录内容的格式
    ch.setFormatter(f_str) # 给中控台设置打印内容的格式
    looger.addHandler(fh) # 将文件句柄添加的looger对象中
    looger.addHandler(ch) # 将中控台添加的looger对象中
    looger.debug(1234) # 咱们二次开发实现的
    looger.info(1234) # 咱们二次开发实现的
    looger.warning(1234) # 咱们二次开发实现的
    looger.error(1234) # 咱们二次开发实现的
    looger.critical(1234) # 咱们二次开发实现的
    """
    # logging.debug() # 人家自带的

python27期day17:re、logging日志模块、作业。的更多相关文章

  1. logging 日志模块学习

    logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...

  2. logging日志模块

    为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...

  3. python 自动化之路 logging日志模块

    logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511 ...

  4. day31 logging 日志模块

    # logging 日志模块 ****** # 记录用户行为或者代码执行过程 # print 来回注释比较麻烦的 # logging # 我能够“一键”控制 # 排错的时候需要打印很多细节来帮助我排错 ...

  5. logging日志模块的使用

    logging日志模块的使用 logging模块中有5个日志级别: debug 10 info 20 warning 30 error 40 critical 50 通常使用日志模块,是用字典进行配置 ...

  6. Python入门之logging日志模块以及多进程日志

    本篇文章主要对 python logging 的介绍加深理解.更主要是 讨论在多进程环境下如何使用logging 来输出日志, 如何安全地切分日志文件. 1. logging日志模块介绍 python ...

  7. Python 中 logging 日志模块在多进程环境下的使用

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 中 logging 日志模块在多进程环境下的使用 使用 Pytho ...

  8. Python logging(日志)模块

    python日志模块 内容简介 1.日志相关概念 2.logging模块简介 3.logging模块函数使用 4.logging模块日志流处理流程 5.logging模块组件使用 6.logging配 ...

  9. 约束、自定义异常、hashlib模块、logging日志模块

    一.约束(重要***) 1.首先我们来说一下java和c#中的一些知识,学过java的人应该知道,java中除了有类和对象之外,还有接口类型,java规定,接口中不允许在方法内部写代码,只能约束继承它 ...

  10. pyhton——logging日志模块的学习

    https://www.cnblogs.com/yyds/p/6901864.html 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模 ...

随机推荐

  1. DQN的三大改进:

    Double DQN:https://www.jianshu.com/p/fae51b5fe000 Prioritised Replay:https://www.jianshu.com/p/db14f ...

  2. Ubuntu16.04下安装Cmake-3.8.2并为其配置环境变量

    下载安装包 首先我们到官网下载最新的cmake二进制安装包https://cmake.org/files/ 这里,我下载的是比较新的cmake-3.8.2-Linux-x86_64.tar.gz解压安 ...

  3. luoguP4585 [FJOI2015]火星商店问题

    题意 显然商店编号的限制能用可持久化trie解决. 特殊的商品预先判掉就好了,现在只考虑普通的商品. 发现商品的时间是单点,询问时一段时间,于是将询问区间在线段树上拆成\(log\)个区间,分别放上该 ...

  4. vue.js 使用v-model v-once

    v-model 双向绑定 v-once 单项绑定 代码: <!doctype html> <html lang="en"> <head> < ...

  5. c语言新知

    C语言学得有点懈怠,昨个遇一个高手. 教了我两天,真细腻. 第一天,让我写一个程序删除字符串多余空格. 我俩代码对比   结果很显然了.

  6. Codeforces Round 589 (Div. 2) 题解

    Is that a kind of fetishism? No, he is objectively a god. 见识了一把 Mcdic 究竟出题有多神. (虽然感觉还是吹过头了) 开了场 Virt ...

  7. 大话设计模式Python实现- 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 下面是一个抽象工厂的demo: #!/usr/bin/env pyth ...

  8. mycat 白话配置

    1.server.xml <user name="root" defaultAccount="true"> <property name=&q ...

  9. ASP.NET Core launchsettings.json 文件

    ASP.NET Core launchsettings.json 文件 在本节中,我们将讨论在 ASP.NET Core 项目中launchsettings.json文件的重要性. launchset ...

  10. Flask--闪现、中间件、多app应用

    目录 闪现 源码 案例 中间件 自定义局部中间件 自定义全局装饰器 多app应用 闪现 flask提供了一个非常有用的flash()函数,它可以用来"闪现"需要提示给用户的消息,比 ...