クイズ: 規格を守らない CSV
한국어 원문으로 표시합니다.
고객이 준 CSV 를 wc -l 로 세니 431 인데 고객은 402건이라고 한다. 가장 먼저 의심할 것은?
- 파일 끝에 빈 줄이 29개 붙어 있어 줄 수만 늘었다
- 인용된 필드 안의 줄바꿈 때문에 레코드 하나가 여러 줄을 차지한다
- 고객이 머리글 줄을 건수에서 빼고 세었다
- 파일이 CRLF 로 끝나 줄 수가 두 배로 세어졌다
파이썬 csv 모듈로 파일을 열 때 newline="" 을 빠뜨리면 무슨 일이 생기는가?
- 구분자가 세미콜론인 파일에서 칼럼이 하나로 합쳐진다
- 파일 전체가 메모리에 한 번에 올라와 큰 파일에서 멈춘다
- 인용된 필드 안의 줄바꿈이 레코드를 끊어 한 레코드가 둘로 쪼개진다
- 한글이 깨져 읽히고 UnicodeDecodeError 가 난다
어느 레코드에서 여는 큰따옴표를 하나 빼먹었다. 표준 CSV 파서는 어떻게 동작하는가?
- 오류를 내지 않고 그 지점부터 파일 끝까지를 한 필드로 읽어 마지막 한 건처럼 보인다
- 즉시 예외를 던지고 멈추므로 어느 줄이 문제인지 바로 알 수 있다
- 그 줄만 건너뛰고 나머지를 정상적으로 읽는다
- 따옴표를 자동으로 닫아 주므로 결과에 아무 영향이 없다
머리글 줄이 있는지 파일만 보고 확실히 알 수 없는 이유로 가장 정확한 것은?
- 첫 줄이 항상 데이터이고 머리글은 별도 파일로 오기 때문이다
- RFC 4180 이 머리글을 금지하고 있어 표준 파일에는 원래 없기 때문이다
- BOM 이 붙은 파일에서만 머리글을 알 수 있기 때문이다
- 머리글 유무는 파일 안이 아니라 미디어 타입의 파라미터로 알리게 되어 있기 때문이다
칼럼 수가 안 맞는 줄을 만났을 때 이 실습이 권하는 처리는?
- 사유와 원래 레코드 번호를 붙여 거절 파일로 떼어 내고 나머지는 적재한다
- 조용히 건너뛰고 로그에만 남긴 뒤 집계를 계속한다
- 모자란 칼럼을 빈 값으로 채워 넣어 행 수를 맞춘다
- 한 줄이라도 어긋나면 파일 전체를 적재하지 않고 돌려보낸다
구분자를 판별할 때 첫 줄만 보고 후보별 등장 횟수를 세면 어떤 파일에서 틀리는가?
- 줄 끝이 CRLF 와 LF 로 섞인 파일
- 머리글 줄이 없는 파일
- 첫 레코드의 인용된 필드 안에 다른 후보 문자가 들어 있는 파일
- 마지막 줄에 줄바꿈이 없는 파일