CSV 파일의 텍스트 줄이 네 개인데 데이터가 두 행인 것은 반드시 누락이 아닙니다. 따옴표로 감싼 필드 안에 줄바꿈이 들어 있으면 하나의 데이터 행이 화면에서 여러 줄을 차지합니다. 줄바꿈이나 쉼표를 단순 분리해서 CSV를 읽는 방식은 메모·주소·설명 필드가 있는 자료에서 쉽게 어긋날 수 있습니다.
먼저 구분할 조건
CSV의 행 경계는 필드 안의 줄바꿈과 구분해야 합니다. 쉼표가 들어간 문장도 필드 전체를 따옴표로 감싸면 하나의 값으로 보관할 수 있습니다. 필드 안에 따옴표를 넣는 방식도 CSV 규칙에 맞춰야 합니다. 실제 자료에서는 쉼표 외의 구분자를 쓰는 경우가 있으므로 파일 확장자만 보고 분리 규칙을 결정하지 말고, 생산자와 소비자가 사용하는 형식을 함께 확인해야 합니다.

직접 확인한 예제와 방법
id·note·amount 세 열에 가상 레코드 두 개를 만들었습니다. 첫 메모는 문장, 쉼표였고 둘째 메모는 첫 줄과 둘째 줄 사이에 실제 줄바꿈을 넣었습니다. Python 3.12.14의 csv.writer로 저장한 파일은 텍스트 줄 네 개였습니다. 같은 파일을 csv.reader로 읽으면 헤더 포함 레코드 세 개, 각 레코드의 열 수는 모두 세 개였습니다. 이 결과는 단순 줄 개수와 CSV 레코드 개수가 다른 실제 예제입니다.
| 확인 항목 | 관찰 결과 |
|---|---|
| 실제 텍스트 줄 | 4줄 |
| CSV 레코드 | 3개 (헤더 포함) |
| 각 레코드 열 수 | 3 / 3 / 3 |
결과를 해석하는 기준
여기서 네 줄 중 일부를 삭제하거나 합치면 자료가 정상화되는 것이 아니라 메모 내용이 바뀝니다. 먼저 따옴표의 시작과 끝, 필드 안의 쉼표·줄바꿈을 읽을 수 있는 파서로 구조를 확인해야 합니다. 파일 끝의 빈 줄도 어떤 도구는 별도 행처럼 보여 줄 수 있어 화면 행 수를 그대로 업무 레코드 수로 보고하면 안 됩니다.
열 수가 모두 세 개여도 의미가 맞는지는 추가로 확인해야 합니다. 잘못된 구분 규칙이 우연히 일정한 열 수를 만들 수도 있습니다. 헤더와 대표 레코드의 ID·메모·금액이 각각 의도한 열에 남는지 비교하고, 따옴표로 감싼 메모의 실제 줄바꿈도 원문과 같은지 확인하는 것이 필요합니다.
메모 줄바꿈을 보존해야 하는 자료
작성 예제로 배송 메모에 주소와 주의사항을 두 줄로 넣는 경우를 가정합니다. 줄바꿈은 하나의 주문에 속한 값입니다. 줄 단위로만 처리하는 수신 시스템에 보낼 때는 줄바꿈을 다른 표현으로 바꾸는 전달 규칙이 필요할 수 있지만, 그 작업도 원래 메모의 의미와 연결을 보존해야 합니다.
| 상황 | 확인할 질문 | 먼저 할 일 |
|---|---|---|
| 메모 안 줄바꿈이 필요 | 수신 도구가 따옴표 필드를 읽나 | 작은 예제로 값 유지 확인 |
| 수신 시스템이 한 줄만 허용 | 합의된 대체 표현이 있는가 | 원문·변환본을 따로 보관 |
| 따옴표가 중간에 누락 | 원래 행 경계를 알 수 있나 | 정상 제공본을 먼저 확보 |
행 수를 맞추려고 메모 내용을 지우지 않습니다. 전달용 변환이 필요하면 무엇을 바꿨는지 기록하고 ID·금액·메모가 여전히 같은 레코드에 있는지 확인하세요.
내 자료에서 확인할 순서
- 원본 CSV를 보존하고 텍스트 줄 수와 기대한 업무 레코드 수를 각각 적습니다. 둘을 같은 숫자라고 가정하지 않습니다.
- 필드 안의 쉼표·따옴표·줄바꿈이 있는 대표 행을 고릅니다. 개인정보가 있다면 비민감 사본에서 형식만 비교합니다.
- 가져오기 도구의 구분자와 따옴표 처리 조건을 확인합니다. 미리보기에서 메모가 한 필드 안에 유지되는지 봅니다.
- 헤더를 제외한 데이터 행 수, 각 행의 열 수, 원문 ID를 대조합니다. 빈 행이나 잘못 분리된 행을 바로 삭제하지 않습니다.
- 내보내기 뒤에는 같은 CSV 규칙으로 다시 읽어 값이 유지되는지 확인합니다. 메모 줄바꿈도 자료의 일부라면 그대로 비교합니다.
- 다른 프로그램과 주고받을 때는 구분자·문자 인코딩·헤더 유무·줄바꿈 포함 가능성을 전달 규칙에 적습니다.
잘못 바꾸었거나 확인이 어려울 때
따옴표가 닫히지 않았거나 필요한 필드가 사라졌다면 파일 제공자에게 정상 원본을 요청해야 할 수 있습니다. 문장을 보고 경계를 임의로 만들어 주면 메모와 금액을 잘못 연결할 위험이 있습니다. 파서가 읽었다는 사실은 문법을 해석했다는 뜻이며, 자료 제공자가 의도한 모든 행이 존재한다는 업무상의 확인까지 대신하지는 않습니다.
정상 완료 기준
정상 완료는 기대한 레코드 수와 ID가 맞고, 모든 열이 제자리에 있으며, 쉼표·따옴표·줄바꿈을 포함한 필드가 원문과 같다는 상태입니다. 공개 예제에서는 데이터 두 행과 헤더 한 행이 각각 세 열로 읽혀야 합니다. 파일의 단순 줄 수가 네 개라는 관찰과 모순되지 않습니다.
같은 예제를 다시 확인할 자료
이번 시험은 쉼표 구분과 표준 따옴표 처리의 작은 예제입니다. 모든 회사의 변형 CSV 형식이나 잘못된 파일을 자동 복구한 결과가 아닙니다. 사용한 파서·구분자·인코딩을 명시하고 다른 방식의 자료는 그 규칙으로 다시 검사해야 합니다.
- quoted-newline.csv (75 bytes)
자료는 비민감 가상 예제입니다. 손상·불일치라고 표시한 파일은 차이를 확인하는 실험용이며 업무 원본으로 사용하지 않습니다. 파일 크기·SHA-256 목록으로 내려받은 원본을 확인할 수 있습니다.
정상적으로 읽은 행도 정렬 뒤 내용이 틀릴 수 있습니다. ID별 금액을 비교하는 기존 예제와 연결해 파일 구조와 데이터 관계를 별도로 점검하세요.
