동일한 데이터가 Excel 파일보다 텍스트 파일에서 더 많은 공간을 차지하는 이유는 무엇입니까?


59

약 100,000 행의 데이터가 있습니다. 이 데이터를 텍스트 파일 형식으로 저장하면 Excel 파일 형식으로 저장하는 것보다 더 많은 공간이 필요합니다. 왜 그런 겁니까?

답변:


118

xlsx형식 현대 Excel에서 사용 실제로 압축 된 형식입니다. 특정 구조의 텍스트 (XML) 파일을 포함하는 ZIP 아카이브입니다.

유사한 ZIP 압축 도구를 사용하여 일반 텍스트 파일을 압축하면 파일 크기가 비슷해야합니다.

또한 Bradley UffnerMorgen 이 주석에서 언급했듯이 Excel은 동일한 문자열 을 중복 제거 하고 사본 하나만 저장합니다. 나는 그러한 방법의 정확한 이점에 대해 확신하지 못하며, 데이터 세트에 따라 다르지만 간단한 압축 압축은 아마도 대부분의 방법을 얻을 것입니다. 1


9.1.3 물리적 패키지

각 Office Open XML 문서는 ZIP 보관 파일로 구현됩니다.

ECMA-376-1 : 2016


1 내 추측에 따르면이 중복 제거는 여러 워크 시트가있을 때 가장 효과적입니다 .zip 압축은 아카이브의 각 파일에 독립적으로 한 번에 제한된 데이터 섹션에만 적용되기 때문에 모든 문자열을 단일 파일에 함께 저장함으로써 나중에 압축하는 데 도움이 될 것입니다. 더 실제적으로, 일반 텍스트 형식이 단일 파일 인 경우에는 거의 차이가 없을 것입니다.


2
대단해! Excel 파일 처리 방법에 대한 통찰력을 제공합니다. 감사!
Dominique

3
@Dominique 더 알고 싶으시면 압축을 풀어서 (예 : 7zip으로 또는 이름을 바꾸어로 끝남 .zip) 하나를 가지고 놀 수 있습니다 . 사양도 사용할 수 있지만 다소 건조합니다.

3
Excel에서도 문자열 사전을 사용한다고 생각합니다. 여기서는 셀간에 동일한 텍스트 비트를 한 번만 저장하면서 재사용 할 수 있습니다.
Bradley Uffner

1
Apache ooxml 라이브러리에 의해 노출 된 API를 기반으로하는 공유 문자열 사전은 적어도 가능합니다.
Morgen 2016 년

2
공유 문자열은 OLE 컨테이너 내에서 BIFF라는 레코드 지향 형식 인 XLS (x 없음) 파일을 쓸 때도 Excel의 기능이었습니다. 이전 XLS 사양을 XLSX와 비교하면 XLSX는 BIFF의 XML화된 압축 된 버전 일뿐입니다. 따라서 bascially MS는 압축으로 인해 의미가없는 XLSX의 공유 문자열 기능을 발명하지 않았습니다. 그들은 XLS를 XLSX로 바꾸는 가장 쉬운 길을 갔다.
Guntram Blohm 2016 년

2

주어진 대답은 정확합니다 .Excel은 데이터를 xml로 저장하기 때문입니다. 또한 데이터를 효율적으로 정렬하면 파일 크기도 줄어 듭니다. 직접 테스트 해보십시오.

A            B                              C
John         Smith-Johnson-Williamson       12345
Sally        Smith-Johnson-Williamson       67890
John         Williams                       34567

C (모두 또는 거의 모든 고유 값이있는 열) 만 기준으로 정렬하면 동일한 B 값이 인접하지 않습니다. Excel의 xml에서는 다음과 같습니다.

<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>

B (공통 값이있는 열)로 정렬하면 동일한 값이 인접 해 있습니다. Excel의 xml에서는 다음과 같습니다.

<Smith-Johnson-Williamson><John><12345>
  <Sally><67890>
<Williams><John><34567>

긴 문자열은 동일하고 인접하기 때문에 Excel은 사람들이 목록을 작성할 때와 비슷하게 함께 묶을 수 있으며 위 줄의 일부를 반복하기 위해 동일한 것을 다시 쓰지 않고 따옴표를 입력합니다. 필자는 조사에서 공유 문자열 사전의 증거를 찾지 못했습니다. 반복되는 필드 값 대신 들여 쓰기 만하십시오.

11 개 주에서만 250,000 명의 고객 메일 링리스트를 보유하고 있었으며 각 레코드에는 그들이 제공하는 오퍼를 식별하는 두 개의 문자열 중 하나 인 필드가있었습니다. 우리 직원들은 어떤 이유로 든 사람들이 말한대로 거리 주소로 사람들을 찾는 데 익숙했기 때문에 거리 번호 열, 거리 이름, 도시 등으로 분류했습니다. 우편 번호, 도시, 거리 이름, 거리 번호 및 마지막으로 주소 행 2로 파일 크기가 엄청나게 줄었습니다. 나는 파일에서 압축이 풀린 XML을 각 방법으로 정렬하여 진행중인 것을 확인했으며 위의 내용은 내가 추론 한 것입니다. 5자를 초과하는 필드가 여러 개 있지만 값이 제한된 세트 인 경우 (예 : 'resolved', 'rejected', 'approved'등과 같은 티켓 처리)


안녕하세요 CompanionCube, 이것은 매우 훌륭한 지식입니다. !!! 정말 고맙습니다.
user734178

-5

3.14159265359와 같은 숫자가있는 경우이를 텍스트 파일에 저장하려면 13 바이트가 필요합니다. 이 숫자를 부동 소수점으로 저장하면 4 바이트 만 필요합니다.


19
이것이 xls(BIFF) 의 경우 일 수는 있지만 , 그렇게하지는 않습니다 xlsx. xlsx모든 데이터를 XML 파일로 저장합니다.이 파일은 숫자의 이진 인코딩을 수행하지 않으며 텍스트 문자열로 변환되어 저장됩니다. 나는 여전히 사양의 관련 섹션을 찾으려고 노력하고 있지만 경험적 테스트 (예 : 저장된 문서 추출) 1.123는 문자 그대로 XML에서 5 문자 문자열로 저장되어 있음을 보여줍니다 .
Bob

14
ECMA-376-1 : 2016 § 18.3.1.4 c(셀)의 셀에 데이터를 저장하는 것을 보여준다 v항에 태그 ECMA-376-1 : 2016 § 18.3.1.96 v(셀 값) 그들이 말하는 이러한 요소에 대한 가능한 값을 ST_Xstring 단순 유형 (§22.9.2.19)으로 정의됩니다. <v>28086.3541666667</v>데이터가 문자열로 명확하게 저장되는 위치 와 같은 예를 제공 합니다.

4
@gerrit 불행히도 Excel 프로그램 내에서 숫자를 부동 소수점으로 해석하므로 전화 번호가 마지막 몇 자리를 삭제하는 것과 같은 흥미로운 문제가 발생합니다. 플로팅으로 디스크에 저장하지 않습니다 (더 이상?).
Bob

2
@Bob이 경우에도 마찬가지입니다 xlsb. 이는 거대한 시트에 권장됩니다
phuclv

2
이 답변이 왜 그렇게 많은 다운 보트를 얻는 지 모르겠습니다. OP는 기술적으로 어떤 Excel 형식을 지정하지 않았으므로 기술적으로도 이것이 정답입니다.
phuclv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.