Pyvaru는 파이썬 개체 (클래스 인스턴스 및 사전, 목록 등의 컬렉션)의 유효성을 검사하므로 CSV에서 시작하여 각 레코드를 DictReader을 사용하여 사전으로 변환합니다. 그래서, 같은 CSV를 부여 :
policyID,statecode,county,eq_site_limit,hu_site_limit,fl_site_limit,fr_site_limit,tiv_2011,tiv_2012,eq_site_deductible,hu_site_deductible,fl_site_deductible,fr_site_deductible,point_latitude,point_longitude,line,construction,point_granularity
119736,FL,CLAY COUNTY,498960,498960,498960,498960,498960,792148.9,0,9979.2,0,0,30.102261,-81.711777,Residential,Masonry,1
448094,FL,CLAY COUNTY,1322376.3,1322376.3,1322376.3,1322376.3,1322376.3,1438163.57,0,0,0,0,30.063936,-81.707664,Residential,Masonry,3
206893,FL,CLAY COUNTY,190724.4,190724.4,190724.4,190724.4,190724.4,192476.78,0,0,0,0,30.089579,-81.700455,Residential,Wood,1
333743,FL,CLAY COUNTY,0,79520.76,0,0,79520.76,86854.48,0,0,0,0,30.063236,-81.707703,Residential,Wood,3
172534,FL,CLAY COUNTY,0,254281.5,0,254281.5,254281.5,246144.49,0,0,0,0,30.060614,-81.702675,Residential,Wood,1
무언가 같이 유효성 검사 코드는 다음과 같습니다
이
import csv
from pyvaru import Validator
from pyvaru.rules import MaxLengthRule, MaxValueRule
class CsvRecordValidator(Validator):
def get_rules(self) -> list:
record: dict = self.data
return [
MaxLengthRule(apply_to=record.get('statecode'),
label='State Code',
max_length=2),
MaxValueRule(apply_to=record.get('eq_site_limit'),
label='Site limit',
max_value=40000),
]
with open('sample.csv', 'r') as csv_file:
reader = csv.DictReader(csv_file)
row = 0
for record in reader:
row += 1
validator = CsvRecordValidator(record)
validation = validator.validate()
if not validation.is_successful():
print(f'Row {row} did not validate. Details: {validation.errors}')
위의 예제는, 특별히 그 "statecode을 당신이 할 수있는 단지 바보 같은 예를 확인한다 "열의 최대 길이는 2이고"eq_site_limit "의 최대 값은 40k입니다. 당신은 apply()
방법 추상 클래스 ValidationRule
를 서브 클래스와 구현하여 자신의 규칙을 구현할 수 있습니다 : 그것은 것을 확인 이전 사용자 정의 규칙을 사용하여 예를 들어 ... 비트 연산자를 사용하여 규칙을 깨뜨릴 수도 있습니다
class ContainsHelloRule(ValidationRule):
def apply(self) -> bool:
return 'hello' in self.apply_to
을
~ ContainsHelloRule(apply_to=a_string, label="A test string")
을 따라서 규칙은 문자열이 "안녕하세요"문자열을 포함하지 않는 경우에만 유효합니다 : 문자열 MST "안녕하세요"당신은 쓸 수 있습니다 포함되어 있습니다.
유효성 검사 정규식이있는 PatternRule
을 사용하여 각 행의 유효성을 검사하여 사전 변환없이 CSV 레코드의 유효성을 검사 할 수도 있지만 물론 어떤 열 값이 유효하지 않은지 알 수 없습니다.