1 logging 模块
logging有两种的配置的方式,configure、logger
1.1 config方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import logging ''' 日志的配置:config模式 只能选择在屏幕或者在文件输出 ''' logging.basicConfig(level=logging.DEBUG, format='%(asctime)s [%(lineno)s] %(message)s' , filename='log.txt', filemode='a' ) logging.info('info message')
|
通过logging.basicConig可以配置输出的格式,level=DEBUG,还可以是INFO、WARNING、ERROR、DIGITAL,这个的优先级是从上往下的。设置好了哪一个就会显示他后面的。
1.2 logger
推荐用logger
默认的情况是输出到屏幕的
1 2 3 4 5 6 7 8
| import logging logger=logging.getLogger() logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message')
|
可通过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import logging logger=logging.getLogger() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh=logging.FileHandler('test.txt') sh=logging.StreamHandler() fh.setFormatter(formatter) sh.setFormatter(formatter) logger.addHandler(fh) logger.addHandler(sh) logger.debug(' logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message')
|
函数的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| def logger(): logger = logging.getLogger() fh = logging.FileHandler('logger.txt') sh = logging.StreamHandler() logger.addHandler(fh) logger.addHandler(sh) logger.setLevel(logging.DEBUG) fm = logging.Formatter('%(asctime)s [%(lineno)s] %(message)s') fh.setFormatter(fm) return logger logger1=logger() logger1.debug('debug message') logger1.info('info message') logger1.warning('warning message') logger1.error('error message') logger1.critical('critical message')
|
2 序列化模块
2.1 JSON
json是不同语言之间的数据准换
序列化 反序列化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import json ''' 序列化 ''' d={'a':123,"b":456} s=json.dumps(d) print(s) print(type(s)) ''' 反序列化 ''' f=open('b.txt') data=f.read() print(data) data2=json.loads(data) print(data2)
|
json 应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import json i=10 s='hello' t=(1,4,6) l=[3,5,7] d={'name':"aa"} 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) print(json_str2) print(json_str3) print(json_str4) print(json_str5)
|
2.2 pickle模块
在python中能够序列化任何数据类型,是Python专用 的
序列化
1 2 3 4 5 6 7 8 9 10
| import pickle import datetime t=datetime.datetime.now() d={'data':t} s=pickle.dump(d,open('new','wb')) print(s)
|
反序列化
1 2 3
| f=open('new','rb') data=pickle.loads(f.read()) print(data)
|
3 正则模块re
正则是对字符串的模糊匹配
re.findall(‘元字符’,”字符串”)
是字符串中的每一个去对应元字符中的规则
元字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 1.通配符"." 2.模糊匹配"*" [0,+∞] 3. + [1,+∞] 4. ? [0,1] 5. {} {0,}==* {1,}==+ {0,1}==? 6.字符集 [ab] a b 是或者的关系 \* + 是普通字符 \- ^ \ 有特殊用处 [0-9]+ [a-z]+ [^2] 取反 [^\d ] 单个 [^\d]+ 多个连续的 7.分组() "(ab)+","add" 取消优先级(?:) 8. | :或 9. \ \d \w \. \d 匹配任何十进制数;它相当于类 [0-9]。 \D 匹配任何非数字字符;它相当于类 [^0-9]。 \s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。 \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。 \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。 \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_] \b 匹配一个特殊字符边界,比如空格 ,&,#等 r'\b','' \b在ASCII中有专门的意思
|
命名分组
1 2 3 4
| res=re.search(r"(?P<A>\w+)\\article\\(?P<id>\d+)", r"abc\article\123", flags=0) print(res) print(res.group("A")) print(res.group("id"))
|
结果:
abc
123
无命名分组
1 2
| res=re.findall("(ad)+abc", "adabcnnf", flags=0) res=re.findall("(?:ad)+abc", "adabcnnf", flags=0)
|
结果:
[‘ad’]
[‘adabc’]
finditer 方法
1 2
| res=re.finditer("\d+", "ad324daa", flags=0) print(res)
|
结果:是一个生成器
callable_iterator object at 0x0000000002B29240>
用next方法
1 2
| print(next(res).group()) print(next(res).group())
|
search 方法
search 值匹配第一个结果
1 2 3
| res= re.search("\d+", "sjasdff454asef2352", flags=0) print(res) print(res.group())
|
match 方法
mach只在字符串开始的位置匹配
1 2 3
| res = re.match("\d+", "123nljklkl2565+6", flags=0) print(res) print(res.group())
|
split 方法
maxsplit是最大的分割次数,默认是0
1 2
| res=re.split("\d+", "asd123fk234as123df1231sdf132fff", maxsplit=4, flags=0) print(res)
|
[‘asd’, ‘fk’, ‘as’, ‘df’, ‘sdf132fff’] 第5次没有继续分割
sub 方法
1 2
| res = re.sub("\d+", "A","abc2342abc123aaa123", count=3,flags=0) print(res)
|
结果:
abcAabcAaaaA
compile 方法
1 2 3
| res = re.compile("\d+", flags=0) res2 = res.findall("hello1232") print(res2)
|