1.logging模块

等级

debug--->info--->warning(默认)--->error--->critical

配置两种方式:

#1.congfig函数
logging.basicConfig(level=logging.DEBUG,#设置等级
format="%(asctime)s---%(message)s",#文件格式
filename="logger",#设置文件名
filemode="a"#文件模式)
logging.debug("message")
num=1000
logging.info("cost %s"%num) logging.info("message") logging.warning("message") logging.error("message") logging.critical("message") import logging

  

注意:流向只能有一个,屏幕或者文件

#2.logger 是一个对象
logger=logging.getLogger()
# print(logger)在模块中产生一个对象 fh=logging.FileHandler("logger2")#产生一个文件对象
sh=logging.StreamHandler()#产生一个屏幕输出对象
logger.setLevel("DEBUG")#logger对象设定等级
fm=logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
#产生一个格式
fh.setFormatter(fm)
#文件对象引用格式
sh.setFormatter(fm)
#屏幕对象引用格式
logger.addHandler(fh)
logger.addHandler(sh)
logging.debug("message") logging.info("message") logging.warning("message") logging.error("message") logging.critical("message")

2.JSON模块

把对象(变量)从内存中变成可存储或传输的过程称之为序列化;反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,并返回表达式的值。

JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,而且可以直接在web页面中读取,非常方便。

JSON和Python内置的数据类型对应如下:

import json
d={"name":"egon"}
s=json.dumps(d)#将字典d转为json字符串--->序列化过程
print(s)
print(type(s))
f=open("new","w")#产生一个文件
f.write(s)#写入内容
f.close()
# ------------------------>
# dump用法
f=open("new2","w")
json.dump(d,f)#--->转成josn字符串,将json字符串写入f里
# ------------------------>
f=open("new")#读取内容
data=f.read()
data2=json.loads(data)#反序列化过程
print(data2["name"]) import json
f=open("new3")
data=f.read()
res=json.loads(data)#只要是满足json格式的字符串
# 就可以使用loads反序列
print(res["name"]) 数据类型表示
import json
i=10
s='hello'
t=(1,4,6)
l=[3,5,7]
d={'name':"yuan"} json_str1=json.dumps(i)
json_str2=json.dumps(s)
json_str3=json.dumps(t)
json_str4=json.dumps(l)
json_str5=json.dumps(d) print(json_str1) #'10'
print(json_str2) #'"hello"'
print(json_str3) #'[1, 4, 6]'
print(json_str4) #'[3, 5, 7]'
print(json_str5) #'{"name": "yuan"}'

3.RE模块(正则表达式)

正则表达式是一种小型的、高度专业化的编程语言,它内嵌在python中,并通过re模块实现。

对字符串的模糊匹配

Re.findall()找到所有的匹配元素,返回一个列表

  1. 普通字符:大多数字符和字母都会和自身匹配(精准匹配)

    import re
    print(re.findall("alex","dfuhualalex"))
    >>
    ['alex']
  2. Findall(“规则匹配的字符串”,“需要匹配的字符串”)  匹配的字符串中有几个成功的都会显示
    import re
    print(re.findall("a..x","assxdfuhualalex"))
    >>
    ['assx', 'alex']
  3. 元字符:(1.).  通配符:什么都可以代表。除了\n匹配不上,其他都可以匹配
    import re
    print(re.findall("a....x","dfuhualalmmex"))
    >>
    ['almmex'] import re
    res=re.findall("p\n....h","hello python p\nnsdfh")#规则匹配加\n属于普通匹配
    print(res)
    >>
    ['p\nnsdfh']

             (2)^  必须在字符串的开头匹配,否则匹配不成功

    import re
    print(re.findall("^a..x","assxdfuhualalex"))
    >>
    ['assx']

             (3)$  在字符串结尾匹配

    import re
    print(re.findall("a..x$","assxdfuhualalex"))
    >>
    ['alex']

             (4)*重复符号(贪婪匹配)  匹配零到无穷次{0,}

    import re
    print(re.findall("alex*","asalexgnnkfnale"))
    >>
    ['alex', 'ale']

             (5)  +重复符号(贪婪匹配)  匹配一到无穷次{1,}

    import re
    print(re.findall("alex+","asalexgnnkfnale"))
    >>
    ['alex']

              (6)? 重复符号(贪婪匹配) 匹配零到一次{0,1}

    import re
    print(re.findall("alex?","asalexxxgnnkfnale"))
    >>
    ['alex', 'ale']

              (7)    {} 万能的,想取几次取几次   可以表示*  +  ?

    {加想要的次数}

    import re
    print(re.findall("alex{2}","asalexxxgnnkfnale"))
    >>
    ['alexx']

      注意:贪婪匹配就是尽可能匹配,后面写?就变成惰性匹配

    import re
    print(re.findall("alex*?","asalexxxgnnkfnale"))
    >>
    ['ale', 'ale'] import re
    print(re.findall("alex+?","asalexxxgnnkfnale"))
    >>
    ['alex'] import re
    print(re.findall("alex??","asalexxxgnnkfnale"))
    >>
    ['ale', 'ale']
  4. 字符集[]  表示或者   在字符集中有特殊意义的只有  

    (1)\

    (2)-

    import re
    res=re.findall("a[1-9]","a423bx56")#字符集显示1到9的一个
    print(res)
    >>
    ['a4'] import re
    res=re.findall("a[1-9]*","a423bx56")#[]后面+* 表示a,一个数字,0-无穷次
    print(res)
    >>
    ['a423']

    (3)^ 非以它开头的

    import re
    print(re.findall("q[^a-z]","qa"))
    >>
    [] import re
    res=re.findall("[^\d]","a423bx56a")#取不是数字的
    print(res)
    >>
    ['a', 'b', 'x', 'a'] import re
    res=re.findall("[^\d]+","a423bx56a")#取不是数字,1到无穷
    print(res)
    >>
    ['a', 'bx', 'a']

     注意:字符集中把部分符号变成了普通符号

  5. \字符  转译反斜杠后面跟元字符去除特殊功能\.   \*

    反斜杠后面跟普通字符时限内特殊功能   \d   \w

    \d  匹配任何十进制数;它相当于类 [0-9]

    练习:求小数
    import re
    res=re.findall("\d+\.?\d*\*\d+\.?\d*","2*6+7*45+1.4*3-8/4")
    print(res)
    >>
    ['2*6', '7*45', '1.4*3'] 求负数
    print(re.findall("-{0,1}\d+\.?\d*\*\d+\.?\d*","2*6.000+7*45-1.4567*3-8/4"))
    print(re.findall("-?\d+\.?\d*\*\d+\.?\d*","2*6.000+7*45-1.4567*3-8/4"))
    >>
    ['2*6.000', '7*45', '-1.4567*3'] import re
    print(re.findall("\d","12+24*8-(3+5*7)"))
    >>
    ['1', '2', '2', '4', '8', '3', '5', '7'] import re
    print(re.findall("\d*","12+24*8-(3+5*7)"))
    >>
    ['12', '', '24', '', '8', '', '', '3', '', '5', '', '7', '', '']

      \D 匹配任何非数字字符;它相当于类 [^0-9]

    import re
    print(re.findall("\D","12+24*8-(3+5*7)"))
    >>
    ['+', '*', '-', '(', '+', '*', ')']

      \s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]

    import re
    print(re.findall("\s","hello world"))
    >>
    [' ']

      \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]

    import re
    print(re.findall("\S","hello world")) >>
    ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'] import re
    print(re.findall("\S+","hello world"))
    >>
    ['hello', 'world']

      \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]

    import re
    print(re.findall("\w","heLlo worlD"))
    >>
    ['h', 'e', 'L', 'l', 'o', 'w', 'o', 'r', 'l', 'D']

      \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]

    import re
    print(re.findall("\W","heLlo worlD"))
    >>
    [' ']

      \b  匹配一个特殊字符边界,比如空格 ,&,#等

    import re
    print(re.findall("i","i an list"))
    >>
    ['i', 'i'] import re
    print(re.findall("i\\b","hello i an list"))
    >>
    ['i']
    import re
    print(re.findall(r"i\b","hello i an list"))#原生字符串,r后面的字符串不做任何转译
    >>
    ['i']

    \  转译普通字符

    import re
    print(re.findall("www*baidu","www*baidu"))
    >>
    [''] import re
    print(re.findall("www\*baidu","www*baidu"))
    ['www*baidu']

    反斜杠转译过程

    解释器-------> re模块

  6. () 元字符  无命名分组

    括号前面加\代表普通字符

    import re
    res=re.findall("(ad)+","addd")
    print(res)
    >>
    ['ad']
    import re
    res=re.findall("(ad)+yuan","addyuangf") #匹配到ad,第二个d时不成功
    print(res)
    >>
    ['ad']

    注意:?:取消优先级

    import re
    res=re.findall("(\d)+yuan","adad7842yuan46gf")
    print(res)
    >>
    ['2'] import re
    res=re.findall("(?:\d)+yuan","adad7842yuan46gf")
    print(res)
    >>
    ['7842yuan']

    命名分组

  7. |或

    import re
    res=re.findall("www.(oldboy)|(baidu).com","www.oldboy.com")
    print(res)
    >>
    [('oldboy', '')] #优先找括号里的规则,匹配成功返回相对应的值,匹配不成功返回空 import re
    res=re.findall("www.(oldboy|baidu).com","www.oldboy.com")
    print(res)
    >>
    ['oldboy']

python之模块2的更多相关文章

  1. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  2. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  3. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  4. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  5. python基础-模块

    一.模块介绍                                                                                              ...

  6. python 安装模块

    python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...

  7. python Queue模块

    先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...

  8. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

  9. Python引用模块和查找模块路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译 ...

  10. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

随机推荐

  1. IDEA 小白采坑

    IDEA Debug状态下,断点第一次可以进去,之后都不能进去 调试时候不要用Ctrl+F9,如果是点击Tool Windows 上的图标的话,也要注意改图标的快捷键是不是Ctrl+F9 Ctrl+F ...

  2. 计算1至n中数字X出现的次数【math】

    转自: nailperry 一.1的数目 编程之美上给出的规律: 1. 如果第i位(自右至左,从1开始标号)上的数字为0,则第i位可能出现1的次数由更高位决定(若没有高位,视高位为0),等于更高位数字 ...

  3. la 3938(未完成)

    题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答.对于询问(a,b), 需要找到两个下标x和y,使得a≤x≤y≤b,并且Dx+Dx+1+...+Dy尽量大. 如果有多组满足条件的x和y ...

  4. SpringBoot Controller接收参数的几种常用方

    第一类:请求路径参数 1.@PathVariable 获取路径参数.即url/{id}这种形式. 2.@RequestParam 获取查询参数.即url?name=这种形式 例子 GET http:/ ...

  5. python--pip出错

    问题: 1.使用pip install时,出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None) ...

  6. AtCoder Grand Contest 002 (AGC002) F - Leftmost Ball 动态规划 排列组合

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC002F.html 题目传送门 - AGC002F 题意 给定 $n,k$ ,表示有 $n\times k$ ...

  7. MySQL高级01

    MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB. 官网下载地址:http://dev.mysql.com/downloa ...

  8. mac 命令操作

    内核空间和用户空间 x86架构中将内核地址空间划分三部分:ZONE_DMA.ZONE_NORMAL和 ZONE_HIGHMEM. 自动加载(开机自动启动服务) ln -sfv /usr/local/o ...

  9. 常见素数筛选方法原理和Python实现

    1. 普通筛选(常用于求解单个素数问题) 自然数中,除了1和它本身以外不再有其他因数. import math def func_get_prime(n): func = lambda x: not ...

  10. jarvis OJ WEB题目writeup

    0x00前言 发现一个很好的ctf平台,题目感觉很有趣,学习了一波并记录一下 https://www.jarvisoj.com 0x01 Port51 题目要求是用51端口去访问该网页,注意下,要用具 ...