Vladiate是CSV文件的严格验证工具
项目描述
描述
Vladiate帮助您为CSV文件的每个字段编写明确的断言。
功能
- 使用纯Python编写验证模式
没有UI,没有XML,没有JSON,只有代码。
- 编写自己的验证器
Vladiate默认提供了一些,但没有理由您不能编写自己的。
- 一次性验证多个文件
可以使用相同的模式,也可以使用不同的模式。
文档
安装
安装
$ pip install vladiate
快速入门
以下是一个示例vladfile.py
from vladiate import Vlad
from vladiate.validators import UniqueValidator, SetValidator
from vladiate.inputs import LocalFile
class YourFirstValidator(Vlad):
source = LocalFile('vampires.csv')
validators = {
'Column A': [
UniqueValidator()
],
'Column B': [
SetValidator(['Vampire', 'Not A Vampire'])
]
}
在这里我们定义了多个用于本地文件vampires.csv的验证器,它看起来像这样
Column A,Column B Vlad the Impaler,Not A Vampire Dracula,Vampire Count Chocula,Vampire
然后我们在与您的.csv文件相同的目录中运行vladiate
$ vladiate
并且得到以下输出
Validating YourFirstValidator(source=LocalFile('vampires.csv')) Passed! :)
处理更改
让我们想象你已经得到了一个新的CSV文件,potential_vampires.csv,看起来像这样
Column A,Column B Vlad the Impaler,Not A Vampire Dracula,Vampire Count Chocula,Vampire Ronald Reagan,Maybe A Vampire
如果我们更新我们的第一个验证器以使用此文件,如下所示
- class YourFirstValidator(Vlad): - source = LocalFile('vampires.csv') + class YourFirstFailingValidator(Vlad): + source = LocalFile('potential_vampires.csv')
我们会得到以下错误
Validating YourFirstFailingValidator(source=LocalFile('potential_vampires.csv')) Failed :( SetValidator failed 1 time(s) (25.0%) on field: 'Column B' Invalid fields: ['Maybe A Vampire']
我们会知道我们可能需要清理这个字段,或者将其添加到SetValidator中。
从头开始
为了使编写新的vladfile.py变得简单,Vladiate会提供有意义的错误信息。
假设以下内容为real_vampires.csv
Column A,Column B,Column C Vlad the Impaler,Not A Vampire Dracula,Vampire Count Chocula,Vampire Ronald Reagan,Maybe A Vampire
我们可以编写一个裸骨验证器如下
class YourFirstEmptyValidator(Vlad):
source = LocalFile('real_vampires.csv')
validators = {}
运行这个vladiate会给出以下错误
Validating YourFirstEmptyValidator(source=LocalFile('real_vampires.csv')) Missing... Missing validators for: 'Column A': [], 'Column B': [], 'Column C': [],
Vladiate期望为每个列指定某些内容,即使是空列表(关于这一点稍后讨论)。我们可以轻松地从错误中复制并粘贴到我们的vladfile.py中,以使其
class YourFirstEmptyValidator(Vlad):
source = LocalFile('real_vampires.csv')
validators = {
'Column A': [],
'Column B': [],
'Column C': [],
}
当我们用vladiate运行这个时,我们得到
Validating YourSecondEmptyValidator(source=LocalFile('real_vampires.csv')) Failed :( EmptyValidator failed 4 time(s) (100.0%) on field: 'Column A' Invalid fields: ['Dracula', 'Vlad the Impaler', 'Count Chocula', 'Ronald Reagan'] EmptyValidator failed 4 time(s) (100.0%) on field: 'Column B' Invalid fields: ['Maybe A Vampire', 'Not A Vampire', 'Vampire'] EmptyValidator failed 4 time(s) (100.0%) on field: 'Column C' Invalid fields: ['Real', 'Not Real']
这是因为Vladiate将字段的空验证器列表解释为EmptyValidator,它期望每个字段都是空字符串。这有助于我们在vladfile.py中添加验证器时做出有意义的决策。它还确保我们没有忘记空列或字段。
内置验证器
Vladiate自带了一些常见的内置验证器
class Validator
通用验证器。应由任何自定义验证器继承。直接使用。
class CastValidator
通用的“可转换为-x”验证器。应由任何转换测试验证器继承。直接使用。
class IntValidator
验证字段是否可以转换为int类型。
- empty_ok=False:
指定是否忽略空字符串字段。
class FloatValidator
验证字段是否可以转换为float类型。
- empty_ok=False:
指定是否忽略空字符串字段。
class SetValidator
验证字段是否在指定的可能字段集中。
- valid_set=[]:
有效可能字段的列表
- empty_ok=False:
默认情况下,将空字符串添加到指定的集中。
- ignore_case=False:
忽略列值和有效集中值的大小写。
class UniqueValidator
确保给定的字段在任何其他列中不重复。可以通过unique_with选项与行中的其他字段一起确定“唯一性”。
- unique_with=[]:
使主字段唯一化的字段名列表。
- empty_ok=False:
指定是否忽略空字符串字段。
class RegexValidator
使用re.match()验证字段是否匹配给定的正则表达式。
- pattern=r'di^':
正则表达式模式。默认情况下,对所有字段失败。
- full=False:
指定是否应该使用fullmatch()或match()。
- empty_ok=False:
指定是否忽略空字符串字段。
class RangeValidator
验证字段是否在给定的范围内(包含)。可以处理整数或浮点数。
- low:
范围的低值。
- high:
范围的高值。
- empty_ok=False:
指定是否忽略空字符串字段。
class EmptyValidator
确保字段始终为空。本质上与空SetValidator相同。当字段没有验证器时默认使用。
class NotEmptyValidator
与EmptyValidator相反。确保字段永远不会为空。
类 Ignore
总是通过验证。用于显式忽略给定列。
类 RowValidator
通用行验证器。应由任何自定义验证器继承。不能直接使用。
类 RowLengthValidator
验证每行都有预期的字段数。预期的字段数从由csv.DictReader读取的CSV头行推断得出。
内置输入类型
Vladiate附带以下输入类型
类 VladInput
通用输入。应由任何自定义输入继承。不能直接使用。
类 LocalFile
从文件系统中本地文件读取。
- filename:
本地CSV文件的路径。
类 S3File
从S3中的文件读取。可以指定完整路径,也可以指定桶/键对。
需要boto库,该库应通过pip install vladiate[s3]安装。
- path=None:
完整的S3文件路径(例如,s3://foo.bar/path/to/file.csv)
- bucket=None:
S3桶。必须与键一起指定。
- key=None:
S3键。必须与桶一起指定。
类 String
从字符串中读取CSV。可以接受一个str或一个StringIO。
- :string_input=None
常规Python字符串输入。
- :string_io=None
StringIO输入。
以编程方式运行Vlads
类 Vlad
以编程方式初始化Vlad程序
- source:
必需。任何VladInput。
- validators={}:
验证器列表。可选,如果设置,则默认为类变量validators,否则为所有字段使用EmptyValidator。
- delimiter=',':
您csv源中使用的分隔符。可选,默认为,。
- ignore_missing_validators=False:
如果有字段在文件中,而Vlad没有验证器,则是否失败验证。可选,默认为False。
- quiet=False:
是否禁用验证生成的日志输出。可选,默认为False。
- file_validation_failure_threshold=None:
达到此失败阈值后停止验证文件。输入一个介于0.0和1.0之间的值。1.0`(100%)`验证整个文件。可选,默认为`None。
例如
from vladiate import Vlad
from vladiate.inputs import LocalFile
Vlad(source=LocalFile('path/to/local/file.csv')).validate()
测试
运行测试
make test
运行lint工具
make lint
命令行参数
Usage: vladiate [options] [VladClass [VladClass2 ... ]]
Options:
-h, --help show this help message and exit
-f VLADFILE, --vladfile=VLADFILE
Python module file to import, e.g. '../other.py'.
Default: vladfile
-l, --list Show list of possible vladiate classes and exit
-V, --version show version number and exit
-p PROCESSES, --processes=PROCESSES
attempt to use this number of processes, Default: 1
-q, --quiet disable console log output generated by validations
贡献者
许可证
开源MIT许可证。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。