4일 만에 CSV 데이터 클리너를 만든 방법 (Python 초급 작업 프로젝트)
Source: Dev.to
배경
QA(Meta, Microsoft)와 RPA 컨설팅을 2년 이상 하던 중 자동화 엔지니어링으로 전환하기로 했습니다. 이것이 제가 4일 만에 만든 첫 번째 Python 프로젝트이며, 전 과정을 문서화했습니다.
도전 과제
프로덕션 수준의 CSV 클리너를 구축하기:
- 데이터(잘못된 항목 포함)를 절대 잃지 않음
- 상세한 오류 보고서 제공
- 실제 현장에서 마주치는 지저분한 데이터 처리
- 품질 우선 원칙 적용
만든 것
Python 스크립트가:
- ✅ 수천 개의 연락처를 몇 초 만에 정리
- ✅ 이메일, 전화번호, 이름, 나이 검증
- ✅ 유효 데이터와 무효 데이터를 구분
- ✅ 상세 오류 보고서 생성
여정 (날짜별)
1‑2일 차: Python 기본
- 변수, 문자열, 함수
- 딕셔너리와 리스트
- CSV 파일 처리
가장 어려웠던 부분: 반복문과 데이터 흐름 이해
3일 차: 핵심 구현
- 정리 및 검증 함수 8개 작성
- 오류 처리 구현
돌파 순간: 각 함수가 오류를 리스트 형태로 반환해야 함을 깨달음
4일 차: 통합 및 테스트
- 모든 함수를 결합
- 파일 쓰기 추가
- 지저분한 데이터로 테스트
핵심 학습: 관심사의 분리(정리 vs 검증)
핵심 코드 섹션
검증 패턴
def validate_email(email):
"""Check email structure"""
errors = []
if "@" not in email:
errors.append("Missing @")
# More checks...
return errors
- 리스트를 반환(여러 오류를 수집 가능)
- 명확한 오류 메시지
- 확장하기 쉬움
메인 루프
for row_num, row in enumerate(reader, start=2):
all_errors = []
# Clean
cleaned_name = clean_name(row.get("Name", ""))
# Validate
all_errors.extend(validate_name(cleaned_name))
# Decide
if all_errors:
error_contacts.append(...)
else:
clean_contacts.append(...)
배운 점
기술 스킬
- Python 기본
- CSV 처리
- 오류 처리 패턴
- 재사용성을 위한 함수 설계
메타 스킬
- 효율적인 학습 방법(프레임워크보다 기본기 먼저)
- 체계적인 디버깅 방법
- 가독성 높은 코드 작성법
- 작업 문서화 방법
QA 마인드셋을 코드에 적용
- 엣지 케이스 테스트(빈 문자열,
None값) - 상세 오류 보고
- 데이터 무결성(절대 정보 손실 금지)
- 명확한 문서화
실수한 점
-
처음에 모든 로직을 하나의 함수에 넣으려 함
- 해결: 정리와 검증을 분리
-
형 변환 시 오류 처리를 빼먹음
- 해결: 필요한 곳마다
try/except블록 추가
- 해결: 필요한 곳마다
-
출시 전에 “완벽하게” 만들고 싶었음
- 해결: 먼저 동작하는 버전을 배포하고, 이후에 개선
결과
프로젝트 통계
- 약 200줄 코드
- 함수 8개
- 시작부터 완료까지 4일
- 100 % 직접 작성(학습 자료 활용)
실제 성능
- 1,000행:
자유롭게 활용해 보세요:
- 프로젝트에 사용
- 개선점 제안
- 댓글로 질문 남기기