好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

常用模块二

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 

查看更多关于常用模块二的详细内容...

  阅读:28次