CSV, JSON, JSONL 파일의 구문정확성을 자동으로 검증하고 상세한 결과 리포트를 생성하는 Python 프로그램입니다.
- CSV: 포맷 규칙 준수 여부, 구분자 일관성, 헤더 행 검증
- JSON: JSON 스키마 검증, 중첩 구조 일관성 확인
- JSONL: 각 라인의 JSON 형식 검증, 구조 일관성 확인
- 인코딩 호환성 검증: UTF-8/ASCII, CP949/EUC-KR 등 호환 인코딩 지원
- 행 수 및 컬럼 구조 일관성 검증
- 데이터 타입 검증: 정수, 실수, 문자열, 날짜/시간, 불린, 이메일, 전화번호, 객체, 배열, null
- 범위 검증: 숫자 범위, 문자열 길이, 날짜 범위
- 범주형 데이터 검증: 허용된 값 목록 확인
- 정규표현식 패턴 검증: 사용자 정의 패턴 매칭
- JSON 특화 검증: 중첩 객체/배열 구조, JSON 스키마 준수
- 수치형 데이터 분석: 평균, 중앙값, 표준편차, 분위수, 히스토그램
- 범주형 데이터 분석: 범주별 분포, 고유값 개수, 빈도 분석
- 자동 구간 생성: 수치형 데이터의 최적 구간 자동 생성
- 사용자 정의 구간: 사용자가 직접 구간 설정 가능
- Null 값 처리: 빈 값, None, NaN 등 모든 null 타입 자동 감지
- Markdown: 읽기 쉬운 텍스트 리포트
- HTML: 웹 브라우저용 아름다운 리포트
- JSON: 프로그래밍 처리용 구조화된 데이터
- 오류 상세 정보, 통계, 권장사항 제공
- 분포 분석 결과: 컬럼별 상세 분포 정보 포함
- 직관적인 명령행 인터페이스
- 실시간 진행률 표시
- 상세한 로깅 및 오류 메시지
- 자동 설정 파일 생성
- Python 3.8 이상
- pip (Python 패키지 관리자)
# 저장소 클론
git clone <repository-url>
cd csv_validator
# 의존성 설치
pip install -r requirements.txt
# 또는 개발 모드로 설치
pip install -e .pandas>=1.5.0
PyYAML>=6.0
pydantic>=2.0
click>=8.0
rich>=13.0
python-dateutil>=2.8
email-validator>=2.0
phonenumbers>=8.13
chardet>=5.0
# CSV용 설정 파일
python -m src.main init -t csv -o csv_config.yml
# JSON용 설정 파일
python -m src.main init -t json -o json_config.yml
# JSONL용 설정 파일
python -m src.main init -t jsonl -o jsonl_config.yml# CSV 파일 검증
python -m src.main validate -c csv_config.yml -i data.csv
# JSON 파일 검증
python -m src.main validate -c json_config.yml -i data.json
# JSONL 파일 검증
python -m src.main validate -c jsonl_config.yml -i data.jsonl
# 분포 분석과 함께 검증
python -m src.main validate -c csv_config.yml -i data.csv --analyze
# 폴더 내 모든 파일 검증
python -m src.main validate -c config.yml -i /path/to/files검증 결과가 Markdown, HTML, JSON 형식으로 자동 생성됩니다.
# 단일 파일 검증
python -m src.main validate -c config.yml -i data.csv
python -m src.main validate -c config.yml -i data.json
python -m src.main validate -c config.yml -i data.jsonl
# 폴더 내 모든 지원되는 파일 검증
python -m src.main validate -c config.yml -i /path/to/files -o /path/to/results
# 상세 로그와 함께 검증
python -m src.main validate -c config.yml -i data.json -v
# 분포 분석과 함께 검증
python -m src.main validate -c config.yml -i data.csv --analyze
# 분포 분석 + 상세 로그
python -m src.main validate -c config.yml -i data.csv --analyze -v
# 특정 형식으로 결과 저장
python -m src.main validate -c config.yml -i data.jsonl --format html# 기본 CSV 샘플 설정 생성
python -m src.main init
# 파일 타입별 샘플 설정 생성
python -m src.main init -t csv -o csv_config.yml
python -m src.main init -t json -o json_config.yml
python -m src.main init -t jsonl -o jsonl_config.yml
# 사용자 정의 경로에 생성
python -m src.main init -o my_config.ymlpython -m src.main check-config -c config.yml# 파일 분석하여 자동 설정 생성 (분포 분석 섹션 포함)
python -m src.main analyze -i data.csv -o auto_csv_config.yml
python -m src.main analyze -i data.json -o auto_json_config.yml
python -m src.main analyze -i data.jsonl -o auto_jsonl_config.yml
# 분포 분석 섹션 제외하고 생성
python -m src.main analyze -i data.csv -o config.yml --no-distribution
# 분포 분석 섹션 명시적으로 포함 (기본값)
python -m src.main analyze -i data.csv -o config.yml --with-distribution| 옵션 | 설명 | 기본값 |
|---|---|---|
-c, --config |
YAML 설정 파일 경로 | 필수 |
-i, --input |
검증할 파일 또는 폴더 경로 (CSV, JSON, JSONL 지원) | 필수 |
-o, --output |
결과 파일 저장 경로 | 입력 경로와 동일 |
-t, --type |
샘플 설정 파일 타입 (csv/json/jsonl) | csv |
-v, --verbose |
상세 로그 출력 | False |
--analyze |
데이터 분포 분석 활성화 | False |
--with-distribution/--no-distribution |
analyze 명령어에서 분포 분석 섹션 포함 여부 | True |
--log-file |
로그 파일 경로 | None |
--format |
결과 리포트 형식 (markdown/html/json/all) | all |
file_info:
file_type: "csv" # 파일 타입 (csv/json/jsonl)
expected_rows: 1000 # 예상 행 수 (선택적)
encoding: "utf-8" # 파일 인코딩
delimiter: "," # CSV 구분자
has_header: true # 헤더 행 포함 여부
# JSON/JSONL 전용 설정
json_schema: null # JSON 스키마 (JSON 파일용)
json_root_path: null # JSON 루트 경로 (중첩된 JSON에서 데이터 위치 지정)
jsonl_array_mode: false # JSONL을 배열로 처리할지 여부
columns:
- name: "id" # 컬럼 이름
type: "integer" # 데이터 타입
required: true # 필수 필드 여부
range: # 범위 검증 (숫자 타입)
min: 1
max: 999999
- name: "name"
type: "string"
required: true
length: # 길이 검증 (문자열 타입)
min: 1
max: 100
- name: "email"
type: "email"
required: true
- name: "category"
type: "string"
required: true
allowed_values: ["A", "B", "C"] # 허용된 값 목록
case_sensitive: false # 대소문자 구분 여부
- name: "created_date"
type: "datetime"
required: true
format: "%Y-%m-%d %H:%M:%S" # 날짜 형식
# 분포 분석 설정 (선택적)
distribution_analysis:
enabled: true
columns:
- name: "age"
type: "numerical"
auto_bins: true
bin_count: 10
- name: "income"
type: "numerical"
bins: [0, 30000, 50000, 75000, 100000, 200000]
- name: "category"
type: "categorical"
max_categories: 10integer: 정수float: 실수string: 문자열datetime: 날짜/시간boolean: 불린email: 이메일 주소phone: 전화번호object: JSON 객체array: JSON 배열null: null 값
distribution_analysis:
enabled: true
columns:
- name: "age"
type: "numerical"
auto_bins: true # 자동 구간 생성
bin_count: 10 # 구간 개수
- name: "income"
type: "numerical"
bins: [0, 30000, 50000, 75000, 100000, 200000] # 사용자 정의 구간distribution_analysis:
enabled: true
columns:
- name: "city"
type: "categorical"
max_categories: 10 # 최대 표시할 범주 수
- name: "education"
type: "categorical"
max_categories: 5auto_bins:true로 설정하면 데이터 범위에 따라 자동으로 구간 생성bin_count: 자동 구간 생성 시 사용할 구간 개수bins: 사용자 정의 구간 리스트 (자동 구간과 함께 사용 불가)max_categories: 범주형 데이터에서 표시할 최대 범주 수
file_info:
file_type: "json"
json_schema:
type: "object"
properties:
id:
type: "integer"
name:
type: "string"
address:
type: "object"
properties:
street:
type: "string"
zipcode:
type: "string"
required: ["id", "name"]file_info:
file_type: "json"
json_root_path: "data.items" # data.items 배열에서 데이터 추출file_info:
file_type: "jsonl"
jsonl_array_mode: true # JSONL을 배열로 처리🚀 검증 시작: data.csv (1,000행)
🏁 검증 완료: data.csv - ⚠️ 3개 오류 발견 (2.5초)
📊 검증 결과 요약:
총 파일 수: 1
성공한 파일: 0
실패한 파일: 1
총 행 수: 1,000
총 오류 수: 3
총 처리 시간: 2.5초
평균 처리 속도: 400 행/초
- 파일 정보: 파일명, 검증 일시, 행 수, 컬럼 수, 처리 시간
- 검증 요약: 구조정확성, 형식정확성, 전체 결과, 성공률
- 오류 상세 정보: 행 번호, 컬럼명, 오류 유형, 실제 값, 예상 값
- 통계 정보: 오류 유형별, 컬럼별, 행별 통계
- 권장사항: 데이터 품질 개선을 위한 구체적인 가이드
프로그램은 스트리밍 방식으로 대용량 CSV 파일을 효율적으로 처리합니다.
# 100만 행 이상의 파일도 처리 가능
python -m src.main validate -c config.yml -i large_data.csv -v# 폴더 내 모든 지원되는 파일을 일괄 검증
python -m src.main validate -c config.yml -i /data/files -o /results#!/bin/bash
# 자동화 예제
# 1. 파일 타입별 설정 파일 생성
python -m src.main init -t csv -o csv_config.yml
python -m src.main init -t json -o json_config.yml
python -m src.main init -t jsonl -o jsonl_config.yml
# 2. 파일 분석하여 설정 업데이트
python -m src.main analyze -i data.csv -o analyzed_csv_config.yml
python -m src.main analyze -i data.json -o analyzed_json_config.yml
python -m src.main analyze -i data.jsonl -o analyzed_jsonl_config.yml
# 3. 검증 실행
python -m src.main validate -c analyzed_csv_config.yml -i data.csv -o results/
python -m src.main validate -c analyzed_json_config.yml -i data.json -o results/
python -m src.main validate -c analyzed_jsonl_config.yml -i data.jsonl -o results/
# 4. 폴더 내 모든 파일 일괄 검증
python -m src.main validate -c analyzed_csv_config.yml -i /data/files -o results/
# 5. 결과 확인
echo "검증 완료. 결과 파일을 확인하세요: results/"csv_validator/
├── src/ # 소스 코드
│ ├── main.py # 메인 진입점
│ ├── cli/ # 명령행 인터페이스
│ │ └── commands.py # CLI 명령어 정의
│ ├── core/ # 핵심 검증 로직
│ │ ├── config.py # 설정 관리
│ │ ├── structural.py # 구조정확성 검증
│ │ ├── format.py # 형식정확성 검증
│ │ ├── json_parser.py # JSON/JSONL 파싱
│ │ └── validator.py # 검증 엔진
│ ├── distribution/ # 분포 분석 모듈
│ │ ├── analyzer.py # 분포 분석 엔진
│ │ ├── categorical.py # 범주형 데이터 분석
│ │ ├── numerical.py # 수치형 데이터 분석
│ │ ├── models.py # 분포 분석 데이터 모델
│ │ ├── config.py # 분포 분석 설정
│ │ └── utils.py # 분포 분석 유틸리티
│ ├── models/ # 데이터 모델
│ │ ├── validation_rule.py # 검증 규칙 모델
│ │ ├── result.py # 검증 결과 모델
│ │ └── error.py # 오류 모델
│ └── utils/ # 유틸리티
│ ├── file_handler.py # 파일 처리
│ ├── formatter.py # 결과 포맷팅
│ └── logger.py # 로깅
├── examples/ # 예제 파일들
│ ├── csv/ # CSV 예제 데이터
│ ├── json/ # JSON 예제 데이터
│ ├── jsonl/ # JSONL 예제 데이터
│ └── configs/ # 설정 파일 예제
├── docs/ # 문서
│ ├── API.md # API 문서
│ └── examples.md # 사용 예제
├── tests/ # 테스트
├── requirements.txt # 의존성
└── README.md # 이 파일
# 1. 직원 데이터용 설정 파일 생성
python -m src.main init -t csv -o employee_config.yml
# 2. 설정 파일 수정 (examples/employee_config.yml 참조)
# 3. 직원 데이터 검증
python -m src.main validate -c employee_config.yml -i examples/csv/employees.csv -v# 1. JSON 데이터 분석
python -m src.main analyze -i examples/json/users.json -o auto_users_config.yml
# 2. 분석된 설정으로 검증
python -m src.main validate -c auto_users_config.yml -i examples/json/users.json -v# 1. JSONL 로그 데이터 분석
python -m src.main analyze -i examples/jsonl/log_entries.jsonl -o auto_logs_config.yml
# 2. 로그 데이터 검증
python -m src.main validate -c auto_logs_config.yml -i examples/jsonl/log_entries.jsonl -v# 1. 고객 데이터용 설정 파일 생성 (분포 분석 포함)
python -m src.main init -t csv -o customer_config.yml
# 2. 설정 파일에 분포 분석 설정 추가 (examples/customer_data_config.yml 참조)
# 3. 분포 분석과 함께 고객 데이터 검증
python -m src.main validate -c customer_config.yml -i examples/csv/customer_data.csv --analyze -v
# 4. 결과 확인: Markdown, HTML, JSON 보고서에 분포 분석 결과 포함UnicodeDecodeError: 'utf-8' codec can't decode byte
해결방법: 설정 파일에서 올바른 인코딩을 지정하세요.
file_info:
encoding: "cp949" # 또는 "euc-kr"참고: 프로그램은 인코딩 호환성을 자동으로 검사합니다:
- UTF-8 ↔ ASCII (호환)
- CP949 ↔ EUC-KR (호환)
- Latin-1 ↔ ISO-8859-1 (호환)
해결방법: 설정 파일에서 올바른 구분자를 지정하세요.
file_info:
delimiter: ";" # 또는 "\t"해결방법: 프로그램은 스트리밍 방식으로 처리하므로 일반적으로 메모리 문제가 없습니다. 만약 발생한다면 파일을 분할하여 처리하세요.
# 상세 로그와 함께 실행
python -m src.main validate -c config.yml -i data.csv -v
# 로그 파일에 저장
python -m src.main validate -c config.yml -i data.csv --log-file validation.log# 모든 테스트 실행
python -m pytest tests/
# 특정 테스트 실행
python -m pytest tests/test_structural.py
# 커버리지와 함께 실행
python -m pytest tests/ --cov=srctests/fixtures/ 디렉토리에 다양한 테스트 시나리오를 위한 샘플 데이터가 포함되어 있습니다.
- 이 저장소를 포크합니다
- 새로운 기능 브랜치를 생성합니다 (
git checkout -b feature/amazing-feature) - 변경사항을 커밋합니다 (
git commit -m 'Add amazing feature') - 브랜치에 푸시합니다 (
git push origin feature/amazing-feature) - Pull Request를 생성합니다
이 프로젝트는 Apache 2.0 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
- 이슈 리포트: GitHub Issues
- 문서: API 문서, 사용 예제
- 이메일: greenshin.kr@gmail.com
| 항목 | 성능 |
|---|---|
| 처리 속도 | 25-100 행/초 |
| 분포 분석 속도 | 2,000-4,000 행/초 |
| 메모리 사용량 | 효율적 (스트리밍 처리) |
| 지원 파일 크기 | 100만 행 이상 |
| 지원 인코딩 | UTF-8, CP949, EUC-KR, ASCII |
| 지원 구분자 | 쉼표, 세미콜론, 탭, 파이프 |
| 지원 파일 형식 | CSV, JSON, JSONL |
| 분포 분석 지원 | 수치형, 범주형 데이터 |
- 데이터 분포 분석 기능 추가
- 수치형 데이터: 평균, 중앙값, 표준편차, 히스토그램
- 범주형 데이터: 범주별 분포, 빈도 분석
- 자동 구간 생성 및 사용자 정의 구간 지원
- Null 값 자동 감지 및 처리
- CLI에
--analyze옵션 추가 - 분포 분석 결과를 보고서에 통합
- Pydantic v2 호환성 업데이트
- JSON, JSONL 파일 지원 추가
- 자동 파일 분석 기능 추가
- 향상된 오류 메시지 및 로깅
- 성능 최적화
- 기본 CSV 검증 기능
- YAML 설정 파일 지원
- Markdown, HTML, JSON 리포트 생성
데이터 파일 구문정확성 검증 프로그램으로 데이터 품질을 보장하고 검증 과정을 자동화하세요! 🚀