很多时候我们的程序会接收来自外部的数据,但是我们不能确保接收的数据是我们期待的数据,这时可能需要对数据进行一些验证。比如,在做接口测试时,我们发送http请求,会受到服务器的应答信息,这时需要对接收的数据进行检查,判断是否符合预期。
这里介绍一个简单的数据验证库 validators ,后续还会介绍其他的数据验证库。
python有很多数据验证工具,但是其他的数据验证工具都需要自己定义模式。validators是一个简单的数据验证库,当验证一个简单的值时,不需要定义一个表单或模式。
目前 validators 支持python版本2.7, 3.3, 3.4, 3.5 和PyPy
在validators中每一个validator是一个简单的函数,函数参数为要验证的值,一些函数可能有额外的关键字参数。对于每一个函数,如果验证成功,则返回 True ;若验证失败,则返回一个 ValidationFailure 对象。
验证一个数字 value 是否在最小值 min 和最大值 max 之间, value 不仅仅可以是整数,也可以是其它数据类型,例如floats, decimals 和 dates.
Parameters:
• min – The minimum required value of the number. If not provided, minimum value will not be checked.
• max – The maximum value of the number. If not provided, maximum value will not be checked.
验证 value 是否是一个有效域。如果 value 是一个有效域名,函数返回 True , 否则返回 ValidationFailure .
也支持国际化域名(IDN domain),例如:
验证是否是合法的邮件地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的国际银行账户号码,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的ipv4地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的ipv6地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证给定的字符串长度是否在指定范围内。
验证是否是合法的mac地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的slug,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的url,如果是,函数返回 True , 否则返回 ValidationFailure .
Parameters:
• value – 要验证的url
• public – (default=False) Set True to only allow a public IP address
验证Finnish Business ID.
验证Finnish Social Security Number.
class validators.utils.ValidationFailure(func, args)
validators.utils.validator(func, *args, **kwargs)
例:
控制台输出结果:
下一篇:Python数据验证库(二)validator
http://www.jianshu.com/p/eee56214af9c
最近项目中用到了跟硬件通信的crc8校验,花了点时间研究了一下python的crc8校验,但是一直没有找到好的技术突破。
google了一番,昨天测试了网上的几种方法都不正确,确定了使用crcmod库来实现,参考官方文档和国内的一遍文章,具体如下:
http://crcmod.sourceforge.net/crcmod.predefined.html#class-predefinedcrc
http://blog.csdn.net/snoop_lttx/article/details/53674657
其实python3 只需要3步即可实现crc8校验,官方有crc8,但是默认是crc-8不是我要找的crc-8-maxim,而crcmod库是支持多种crc8计算的。
下面我是采用crc-8-maxim算法的,多项式:x8+x5+x4+1(二进制为100110001),0x31
正确运行结果为:0xd6
下面我们使用在线crc校验工具测试一下:
http://www.ip33.com/crc.html
测试截图如下:
到此我们完成了crc8校验和。
目前有三种方式实现转换:
关于crc8的理论,本文不再赘述了。可以参考以下文章:
http://blog.csdn.net/haifengid/article/details/51753181
1. 每个维度都画出来,看直方图,肉眼判别。python中可以用matplotlib画图。2. 连续的分布: Kolmogorov Smirnov (k-s) test 或者Cramér–von Mises (CvM) test
3. 离散的分布: Chi-Square test
4. 正态性可以用Lillifors test
5. 通常而言,你会发现这些数据不是从常见分布来的;什么分布并不重要,常见分布只是简化计算用的。
2, 3和4的python实现详见scipy.stats或者statsmodels.stats这两个库的文档