csv文件(valid_file.csv)如下
id tech_manager vessel_name vessel_code
1 789 900 1
2 748 73 9
3 564 91.23 15
4 332 52.12 20
Json文件(mainjson.json)如下:
{
"id":["decimal"],
"tech_manager":["decimal","int"],
"vessel_name":["decimal"],
"vessel_code":["range(0,10)"]
}
json 文件告诉每一列要应用什么验证。例如,对于 id 应用十进制验证,但对于 tech_manager 应用十进制和 int。
如何在 json 文件中提供范围为 min 0 和 max 10 的列vessel_code 上应用范围验证。
应用验证的python代码如下
def check_decimal(dec):
try:
Decimal(dec)
except InvalidOperation:
return False
return True
VALIDATORS = {
'decimal': CustomElementValidation(lambda d: check_decimal(d), 'is not decimal'),
'int': CustomElementValidation(lambda i: check_int(i), 'is not integer')}
def do_validation():
data = pd.read_csv('valid_file.csv')
with open('mainjson.json', 'r') as my_json:
json_schema = json.load(my_json)
column_list = [Column(k, [VALIDATORS[v] for v in vals]) for k, vals in json_schema.items()]
schema = pandas_schema.Schema(column_list)
errors = schema.validate(data)
pd.DataFrame({'col':errors}).to_csv('erro1.csv')
这些代码对每一列应用来自 json 文件的验证,然后提供验证不满足的地方。在这些中,我能够对列应用十进制验证。但我不知道如何在列上应用范围验证。这意味着如果特定列不在给定范围内,它必须使用 json 文件作为 pandas 模式显示它不在范围内的索引。