Python:模块(二)

一、jsonpath

用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本。

用法:

import jsonpath
res=jsonpath.jsonpath(dic_name,'$..key_name')
#嵌套n层也能取到所有key_name信息,其中:“$”表示最外层的{},“..”表示模糊匹配,当传入不存在的key_name时,程序会返回false

eg:

d={
        "error_code": 0,
        "stu_info": [
                {
                        "id": 2059,
                        "name": "小白",
                        "sex": "男",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "18378309272",
                        "gold": 10896,
                        "info":{
                            "card":434345432,
                            "bank_name":'中国银行'
                        }

                },
                {
                        "id": 2067,
                        "name": "小黑",
                        "sex": "男",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "12345678915",
                        "gold": 100
                }
        ]
}
res= d["stu_info"][1]['name'] #取某个学生姓名的原始方法:通过查找字典中的key以及list方法中的下标索引
print(res) #输出结果是:小黑

import jsonpath
res1=jsonpath.jsonpath(d,'$..name') #嵌套n层也能取到所有学生姓名信息,$表示最外层的{},..表示模糊匹配
print(res1) #输出结果是list:['小白', '小黑']

res2= jsonpath.jsonpath(d,'$..bank_name')
print(res2) #输出结果是list:['中国银行']

res3=jsonpath.jsonpath(d,'$..name123') #当传入不存在的key(name)时,返回False
print(res3) #输出结果是:False


二、traceback模块

利用traceback模块
开头添加import traceback

eg1:

dic={
"id":1,
"name":"houning",
"sex":"nv"
}
choice=input('请输入您要查看的属性:')
try: #异常处理要用到try
print(dic[choice]) #如果代码没有异常,输出这句代码
except Exception as e: #这个Exception能捕捉到所有的异常;也可换成其他类型的异常词,但其他的异常信息(比如KeyError)捕捉都比较单一
print('出异常了',e) #python3这样用,e打印出来的是异常信息,出了异常的话,会输出e;也可以写其他,但一般都写e
else: #没有出异常的话,走else这里;也可以不写
print('ok')

eg2:

用traceback 结尾改成:

try:        
print(dic[choice])
except Exception as e:
print('出异常了',e)
  traceback.print_exc() #程序运行会输出异常发生时候完整的栈信息,包括调用顺序、异常发生的语句额、错误类型等。
else:
print('ok')
错误信息如下:
traceback.print_exc()方法打印出的信息包括3部分:错误类型、错误对应的值以及具体的trace信息,包括文件名、具体的行数、函数名以及对应的源代码。

Traceback模块常用的几个方法:

  1. traceback.print_exception(type,value,traceback[,limit[,file]]),根据limit的设置打印栈信息,fileNone的情况下定位到sys.stderr,否侧则写入文件;其中type、value、traceback这3个参数对应的值可以从sys.exc_info()中获取。
  2. traceback.print_exc([limit[,file]]),为print_exception()函数的缩写,不需要传入type、value、traceback这3个参数。
  3. traceback.format_exc([limit]),与print_exc()类似,区别在于返回字符串。
  4. traceback.extract_stack([file,[,limit]]),从当前栈帧中提取trace信息。

三、nnlog模块:写日志

import nnlog
log = nnlog.Logger(file_name='my.log',level='debug',when='D',backCount=5,interval=1)
#file_name是日志文件名
#level是日志级别,如果不传的话默认是debug级别
#when是日志文件多久生成一个,默认是按天,S 秒、M 分、 H 小时、 D 天、 W 每星期
#backCount是备份几个日志文件,默认保留5天的
#interval是间隔多久生成一个日志文件,默认是1天
log.debug('默认日志级别是debug')
log.info('info级别')
log.warning('waring级别')
log.error('error级别')
#my.log日志内容:2020-03-08 23:10:11,066 - /Users/houning/Downloads/接口自动化课程/课堂练习/课上练习/test2.py[line:8] - DEBUG: 默认日志级别是debug
#2020-03-08 23:10:11,066 - /Users/houning/Downloads/接口自动化课程/课堂练习/课上练习/test2.py[line:9] - INFO: info级别
#2020-03-08 23:10:11,066 - /Users/houning/Downloads/接口自动化课程/课堂练习/课上练习/test2.py[line:10] - WARNING: waring级别
#2020-03-08 23:10:11,066 - /Users/houning/Downloads/接口自动化课程/课堂练习/课上练习/test2.py[line:11] - ERROR: error级别

log2 = nnlog.Logger(file_name='nn.log') #直接传入文件名也是ok的,其他的就取默认值了
log2.debug('test')
#nn.log日志内容:2020-03-08 23:10:11,067 - /Users/houning/Downloads/接口自动化课程/课堂练习/课上练习/test2.py[line:14] - DEBUG: test

四、写邮件 yagmail模块

import yagmail
#需要:账号 密码 邮箱服务器 收件人 抄送 主题 正文 附件
username='940704451@qq.com'
passwd='gjovvnertqnibedd' #邮箱授权码,不是登录密码
mail=yagmail.SMTP(user=username,password=passwd,host='smtp.qq.com',smtp_ssl=True)
#这一步连接上邮箱了.user password host是定义的,不能改变。如果不是QQ邮箱,不用加上smtp_ssl=True
mail.send(to='307882464@qq.com',cc='hn9251@126.com',subject='test',contents='tteesstt',attachments=r'/Users/houning/Downloads/接口自动化课程/课堂练习/课上练习/access.log')
#cc是抄送。多个收件人时,to后面跟一个邮箱list就行了。attachments是附件,后面跟绝对路径,如果发送附件的中文名是乱码的话,就卸载掉原有的yagmail模块,换一个安装

posted @ 2020-07-17 13:46  hesperid  阅读(126)  评论(0编辑  收藏  举报