CSV 도우미English

큰 CSV가 Excel에서 일부만 보이면 파일이 잘린 걸까요?

Excel 시트에서 끝까지 보이지 않는다는 사실만으로 CSV 원본이 잘렸다고 확정할 수는 없습니다. 원본 CSV의 레코드 수와 한 워크시트에 넣을 수 있는 행 수는 따로 확인해야 합니다. 확인 전에 열린 화면을 원본 CSV 위에 저장하지 마세요.

원인: 워크시트 한도와 파일 전체는 다릅니다

Microsoft의 현재 Excel 사양은 한 워크시트에 1,048,576행을 안내합니다. 머리글을 한 행 쓰고 데이터 한 레코드를 시트 한 행에 놓는다면 데이터용 공간은 1,048,575행입니다. 이는 그 조건에서의 행 수 계산이지 모든 크기·내용의 파일이 그만큼 성공적으로 열린다는 보장이 아닙니다. 메모리·열 수·셀 내용·읽기 방식 등 다른 제한도 있을 수 있습니다. Microsoft Excel 사양

이 수치는 워크시트 한도이며 CSV 파일 형식의 최대 레코드 수라는 뜻은 아닙니다. 또한 필터·숨김 행·미리보기·가져오기 범위 때문에 적게 보일 수도 있습니다. 먼저 무엇을 보고 있는지, 가져오기 오류나 제한 안내가 있었는지 구분하세요.

작은 예제로 세는 기준부터 확인하세요

합성 CSV는 세 열, 머리글 한 개와 데이터 4건입니다. R02 메모에는 인용된 필드 안 줄바꿈이 있습니다. 따라서 물리 줄은 6개지만 데이터 레코드는 4개입니다. 실제 고객 자료가 아니며 작은 파일 자체가 Excel 행 한도를 재현하는 것은 아닙니다.

비교 대상이 작은 예제의 값의미
물리 줄6메모 내부 줄바꿈도 줄로 셈
CSV 레코드(머리글 포함)5파서가 필드를 묶어서 읽은 레코드
데이터 레코드4머리글 1개 제외
마지막 데이터 IDR04제공처 원본과 대조할 보조 단서

줄 수와 레코드 수가 다른 이유가 더 필요하면 관련 가이드를 참고하세요. 단순 줄 분할이나 쉼표 개수만으로 데이터 행 수를 세지 않습니다.

해결: 원본 사본을 순차적으로 읽어 전체 건수 확인

다음 코드는 합성 예제의 UTF-8·쉼표·세 열·머리글 규칙을 가정합니다. 예제 파일과 같은 폴더에서 실행합니다. 모든 행을 한꺼번에 리스트에 담지 않고 한 레코드씩 읽습니다. 그래도 개별 필드 크기와 파서 제한은 존재하며 모든 대용량 파일의 처리를 보장하는 코드는 아닙니다. Python CSV 공식 문서

import csv

count = 0
last_id = None
with open('guide-16-sheet-limit.csv', encoding='utf-8-sig', newline='') as f:
    reader = csv.reader(f, delimiter=',', strict=True)
    header = next(reader, None)
    if header != ['record_id', 'memo', 'amount']:
        raise ValueError('Check the expected header and delimiter')
    for row in reader:
        if len(row) != 3:
            raise ValueError('Check record width; count is not confirmed')
        count += 1
        last_id = row[0]

capacity = 1_048_576 - 1
print('data_records:', count)
print('last_record_id:', last_id)
print('single_sheet_data_capacity:', capacity)
print('within_row_count_only:', count <= capacity)

기대 출력은 data_records: 4, last_record_id: R04, single_sheet_data_capacity: 1048575, within_row_count_only: True입니다. 마지막 True는 행 수만 비교한 결과이며 실제 Excel에서 정상적으로 읽었다는 뜻이 아닙니다.

빈 줄이나 열 수 불일치가 있으면 이 코드는 조용히 버리지 않고 확인을 요청합니다. 다른 열 구성·구분자·문자코드에는 제공처 명세를 확인해 맞춰야 합니다. 파서가 읽었다는 사실이나 마지막 ID만으로 원자료의 완전성이 입증되지는 않습니다. 제공처의 건수·대상 기간·처음과 마지막 식별자도 함께 대조하세요.

행 상한을 넘는다면

원본 전체를 별도 보관하고, 필요한 것은 전체 원문 보존인지 일부 조회인지 집계인지 먼저 정하세요. 시트에 모두 놓을 필요가 없다면 별도 데이터 처리 방법으로 필요한 집계만 만들 수 있지만, 해당 도구의 형식·자원 제한과 결과 검증은 따로 필요합니다.

여러 CSV 사본으로 나누려면 CSV 파서와 writer로 레코드 단위 분할을 해야 합니다. 단순히 물리 줄을 일정 개수씩 자르면 R02 같은 메모 내부가 끊길 수 있습니다. 각 사본의 머리글과 데이터 건수 합계, 원본과의 값·순서 대조를 확인하세요. 이 글은 분할 도구를 실행하거나 완성된 대용량 변환을 제공하지 않습니다.

CSV 도우미에서도 파일 크기를 먼저 확인하세요

CSV 검사기는 작은 예제의 구조·레코드 수·원문을 확인하는 데 사용할 수 있습니다. 현재 구현은 10,000,000바이트를 넘는 파일을 받지 않습니다. 10MB 표시는 여기서 십진 바이트 기준입니다. Excel 행 한도를 넘는 실제 파일을 검사기에 반드시 넣을 수 있다고 안내하지 않습니다. 행 수가 적어도 긴 필드 때문에 파일이 클 수 있습니다.

미리보기에서 보이는 행 수를 전체 레코드 수로 읽지 말고 요약과 구조 오류를 함께 보세요. 검사기가 읽은 내용이 제공처에서 내보낸 전체 데이터인지, Excel이 일부를 저장했는지는 원본/내보내기 이력과 대조해야 합니다. 원본을 복구하거나 누락 행을 추측해 만드는 기능은 아닙니다.

검증 범위와 한계

작은 합성 예제의 본문 Python 출력·4건/마지막R04·인용 개행·원본 보존과 현재 CSV 라이브러리의 레코드 수를 로컬에서 확인했습니다. 별도 임시 합성 파일로 머리글 1개+데이터 1,048,576건을 만들어 순차 읽기 건수와 마지막ID를 확인했습니다. 머리글을 포함하면 워크시트 행 한도보다 1행 많다는 산술 비교입니다. 이 임시 큰 파일은 다운로드 예제로 제공하지 않습니다.

실제 Excel 대용량 가져오기·오류/경고 화면·저장 시 손실·브라우저 UI·대용량 업로드는 실행하지 않았습니다. Excel이 항상 같은 경고를 띄우거나 조용히 자른다고 주장하지 않습니다. Python의 순차 읽기는 Excel의 처리 방식과 동일하다는 뜻도 아닙니다.

검토일: 2026-10-19. 참고용 합성 예제이며 원본의 완전성을 확인하려면 제공처의 내보내기 범위·건수도 함께 확인하세요.

AI 보조 작성: AI로 원고와 합성 자료를 작성하고 로컬 코드 출력을 대조했습니다. 실제 고객 자료나 사람의 실제 Excel 검수는 사용하지 않았습니다.

이 글의 예제 파일을 CSV 검사기에 넣어 직접 확인해 보세요.

CSV 검사기 열기 ›