2

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 模式显示它不在范围内的索引。

4

0 回答 0