运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

常用模块二

运维开发网 https://www.qedev.com 2021-04-07 08:59 出处:51CTO 作者:六个橘子
1.re模块正则表达式(键盘上的符号组合,构成规则,筛选内容)importreres=re.findall('l','helloworld123')#findall找成功一次后找到所有print(res)1、\w匹配包括下划线的任何单词字符(等价于[A-Za-z0-9])\W匹配任何非单词字符(等价于[^A-Za-z0-9])importreprint(re.findall('\w',"hello

1.re模块

正则表达式(键盘上的符号组合,构成规则,筛选内容)

import re
res = re.findall('l', 'hello world 123')  # findall 找成功一次后找到所有
print(res)

1、\w 匹配包括下划线的任何单词字符(等价于[A-Za-z0-9])

\W 匹配任何非单词字符 (等价于[^A-Za-z0-9])

import re
print(re.findall('\w',"hello\e wdl zx 123_"))
print(re.findall('\W',"hello\e wdl zx 123_"))

2、\s 匹配任何空白字符,包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v])

\S 匹配任何非空白字符(等价于[^\f\n\r\t\v])

import re
print(re.findall('\s',"hello\e wdl zx 123_"))
print(re.findall('\S',"hello\e wdl zx 123_"))

3、 \d 匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9])

\D 匹配非数字字符(等价于 [^0-9])

import re
print(re.findall('\d',"hello\e wdl zx 123_"))
print(re.findall('\D',"hello\e wdl zx 123_"))

4、 ^ 匹配行首,例如'^dog'匹配以字符串dog开头的行(注意:awk 指令中,'^'则是匹配字符串的开始)

$ 匹配行尾,例如:'^、dog$'匹配以字符串 dog 为结尾的行(注意:awk 指令中,'$'则是匹配字符串的结尾)

import re
print(re.findall("^egon","heegonllo egon xxx egon yyy egon"))
heegonllo egon xxx egon yyy egon
^egon
print(re.findall("^egon","egonllo egon xxx egon yyy egon"))
print(re.findall("egon$","egonllo egon xxx egon yyy egon1"))

5、 \t 匹配一个横向制表符(等价于 \x09和 \cI)

\n 匹配一个换行符(等价于 \x0a 和\cJ)

import re
print(re.findall("\n","a\nb\tc\n"))
print(re.findall("\t","a\nb\tc\n"))

6、 . 匹配除换行符('\n')之外的任意单个字符(注意:awk 指令中的句点能匹配换行符)

import re
print(re.findall("a.c","a1c a+c abc aAc a c aaaaac a\nc a\tc"))
print(re.findall("a.c", "a1c a+c abc aAc a c aaaaac a\nc a\tc", re.DOTALL)) #让你的点可以匹配所有

7、 []: 代表匹配一个字符,该字符可以是指定的字符

print(re.findall("a[1A]c","a1c a+c abc aAc a c aaaaac a\nc a\tc"))
print(re.findall("a[0-9]c","a1c a+c abc aAc a c aaaaac a\nc a\tc"))
print(re.findall("a[a-zA-Z]c","a1c a+c abc aAc a c aaaaac a\nc a\tc"))
print(re.findall("a[+*\-]c", "a1c a+c abc a-c a*c a\c aAc a c aaaaac a\nc a\tc")) #这个减号左右均有东西代表范围,r代表里面是原生字符串
print(re.findall(r"a[+*\\-]c", "a1c a+c abc a-c a*c a\c aAc a c aaaaac a\nc a\tc")) #\代表转移意思,\\
print(re.findall(r"a[-+*\\]c", "a1c a+c abc a-c a*c a\c aAc a c aaaaac a\nc a\tc"))
print(re.findall(r"a[^-+*\\]c", "a1c a+c abc a-c a*c a\c aAc a c aaaaac a\nc a\tc")) #[]内加^代表取反;^加在外面代表从头开始匹配

8、 *:左边那一个符号出现0次到无穷次

?:左边那一个符号出现0次到1次

+:左边那一个符号出现1次到无穷次

{n,m}:左边那一个符号出现n次到m次

print(re.findall("ab*",'a ab abbb abbbb bbbba'))
print(re.findall("ab?","a ab abbb abbbb bbbba"))
print(re.findall("ab+","a ab abbb abbbb bbbba"))
print(re.findall("ab{0,1}","a ab abbb abbbb bbbba"))
print(re.findall("ab{0,}","a ab abbb abbbb bbbba"))
print(re.findall("ab{1,}","a ab abbb abbbb bbbba"))
print(re.findall("ab{3,5}","a ab abbb abbbb bbbba"))
print(re.findall("compan(ies|y)", "Too many companies have gone bankrupt, and the next one is your company"))
print(re.findall("compan(?:ies|y)", "Too many companies have gone bankrupt, and the next one is your company")) #?:取消分组,保留最全的东西
.*
print(re.findall('a.*c', 'a1231231+-c666666666c11111111'))
print(re.findall('a.*?c', 'a1231231+-c666666666c11111111')) #.*后面加?,把贪婪的变成非贪婪的

2.logger模块

CRITICAL = 50 #FATAL = CRITICAL # CRITICAL:危险的

ERROR = 40

WARNING = 30 #WARN = WARNING 即将发生风险

INFO = 20 #常规日志 info:信息情报

DEBUG = 10 #调试级别 开发过程中记调试日志 debug:调试除错

NOTSET = 0 #不设置

自上而下接收

logger 给日志打标签

filter 过滤

handler 控制日志输出到哪的

formatter 控制日志输出格式

logging_dic 配置日志用字典

定义三种日志输出格式,日志中可能用到的格式化串如下

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

日志配置字典

LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'formatter1': {
            'format': fm1   #时间+内容  %(asctime)s:%(message)s
        },
        'formatter2': {
            'format': fm2
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'formatter2'
        },
        #打印到文件的日志,收集info及以上的日志
        'fh1': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'formatter1',
            'filename': LOG1_PATH,
            'encoding': 'utf-8',
        },
        'fh2': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': 'formatter1',
            'filename': LOG2_PATH,
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        '': {
            'handlers': ['console','fh1','fh2'],
            'level': 'DEBUG',
            'propagate': False,
        },
        '用户相关': {
            'handlers': ['console','fh1'],
            'level': 'DEBUG',
            'propagate': False,
        },
         '交易相关': {
             'handlers': ['console','fh1','fh2'],
             'level': 'DEBUG',
             'propagate': False,
         },
    },
}

3.序列化模块

序列化:内存中数据类型转换成一种特殊格式,可以存硬盘,可以沿网络发给另外软件

反序列化:

1 序列化

dic = {'name':"egon","age":18}

str_dic = str(dic)

with open('a.txt',mode='wt',encoding='utf-8') as f:

f.write(str_dic)

2、反序列化

with open('a.txt',mode='rt',encoding='utf-8') as f:

dic = eval(f.read()) # "{'name': 'egon', 'age': 18}" #eval()将字符串里的代码拿出来运行

print(dic['name'])

存档

跨平台交互数据(需要一种通用的数据格式)

1、存档(pickle)

import pickle
import json

dic = {'name': "egon", "age": 18.5, "k1": True, 'k2': None, 'k3': (1, 2, 3), 'k4': {1, 2, 3}}
json.dumps(dic)  # 报错

dic_pkl = pickle.dumps(dic)
print(dic_pkl,type(dic_pkl))
with open('a.pkl',mode='wb') as f:
     f.write(dic_pkl)

with open('a.pkl',mode='wb') as f:
pickle.dump(dic,f)
with open('a.pkl', mode='rb') as f:
方式一
    res = f.read()
    dic = pickle.loads(res)
    print(dic)
方式二
    res = pickle.load(f)
    print(res)

2、跨平台交互数据(需要使用一种通用的数据格式->json)

====================json 格式的序列化与反序列化1

import json
dic = {'name':"egon","age":18.5,"k1":True,'k2':None,'k3':(1,2,3)}
json_str = json.dumps(dic)
print(json_str,type(json_str))
with open('a.json',mode='wt',encoding='utf-8') as f:
    f.write(json_str)
with open('a.json',mode='rt',encoding='utf-8') as f:
    json_str = f.read()
    res = json.loads(json_str)
    print(res,type(res))

====================json 格式的序列化与反序列化2

dic = {'name':"egon","age":18.5,"k1":True,'k2':None,'k3':(1,2,3)}
with open('a.json',mode='wt',encoding='utf-8') as f:
    json.dump(dic,f)
with open('a.json',mode='rt',encoding='utf-8') as f:
    res = json.load(f)
    print(res,type(res))

猴子补丁

import json
import ujson  # pip3 install ujson

def monkey_patch():
    json.dumps = ujson.dumps
    json.loads = ujson.loads

monkey_patch()

json.dumps
json.loads

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号