Python数据验证库(一) validators

Python015

Python数据验证库(一) validators,第1张

很多时候我们的程序会接收来自外部的数据,但是我们不能确保接收的数据是我们期待的数据,这时可能需要对数据进行一些验证。比如,在做接口测试时,我们发送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这两个库的文档