Eu tenho cerca de 100000 linhas de dados. Se eu armazenar esses dados em um formato de arquivo de texto, será necessário mais espaço do que se eu os armazenar em um formato de arquivo do Excel. Por que é que?
Eu tenho cerca de 100000 linhas de dados. Se eu armazenar esses dados em um formato de arquivo de texto, será necessário mais espaço do que se eu os armazenar em um formato de arquivo do Excel. Por que é que?
Respostas:
O xlsx
formato usado pelo Excel moderno é na verdade um formato compactado. É um arquivo ZIP que contém arquivos de texto (XML) em uma determinada estrutura.
Se você compactar seu arquivo de texto sem formatação com uma ferramenta de compactação ZIP semelhante, deverá obter tamanhos de arquivo semelhantes.
Além disso, conforme mencionado por Bradley Uffner e Morgen nos comentários, o Excel deduplicará seqüências de caracteres idênticas e armazenará apenas uma cópia delas. Não tenho certeza dos ganhos exatos de um método assim, e isso dependerá do seu conjunto de dados, mas a simples compactação zip provavelmente o levará a maior parte do caminho. 1 1
9.1.3 Pacotes físicos
Cada documento Office Open XML é implementado como um arquivo ZIP.
1 Meu palpite é que essa desduplicação é mais eficaz quando você tem várias planilhas, pois a compactação zip se aplica independentemente a cada arquivo em um arquivo e apenas a seções limitadas dos dados de uma só vez - armazenando todas as seqüências de caracteres juntas em um único arquivo. deve ser um benefício para a compactação posterior. Mais praticamente, se o seu formato de texto sem formatação estiver em um único arquivo, provavelmente haverá pouca diferença.
.zip
). A especificação também está disponível, mas facilita a leitura.
A resposta dada está correta, porque o Excel armazena seus dados como xml. Também se deve a isso, que classificar seus dados com eficiência também reduzirá o tamanho do arquivo. Teste você mesmo - digamos que você tenha dados como
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Se você classificar apenas por C (uma coluna com todos ou quase todos os valores exclusivos), os valores idênticos de B não serão adjacentes. No xml do Excel, fica assim:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Se você classificar por B (uma coluna com valores comuns), os valores idênticos serão adjacentes. No xml do Excel, fica assim:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Como essa cadeia longa é idêntica e adjacente, o Excel sabe que pode agrupá-las, semelhante a quando as pessoas escrevem listas e, para repetir parte da linha acima, elas digitam aspas em vez de reescrever a mesma coisa. Não encontrei nenhuma evidência de um dicionário de cadeia compartilhada em minha investigação - apenas esse recuo no lugar do valor do campo repetido.
Eu tinha listas de correio de 250.000 clientes em apenas 11 estados, e em cada registro havia um campo que era uma das duas seqüências de caracteres que identificavam a oferta que eles recebem. Por algum motivo, nossos funcionários estavam acostumados a procurar as pessoas pelo endereço como faladas, por isso foram classificadas na coluna do número da rua, depois no nome da rua, na cidade, etc. CEP, cidade, nome da rua, número da rua e, finalmente, a linha de endereço 2, o tamanho do arquivo foi reduzido incrivelmente. Examinei o xml descompactado no arquivo classificado em cada sentido para ver o que estava acontecendo, e o acima foi o que deduzi. Se houver vários campos com mais de cinco caracteres, digamos, mas os valores tiverem um conjunto limitado (por exemplo, disposições de ticket como 'resolvido', 'rejeitado', 'aprovado' etc.),
Se você tiver um número como 3,14159265359, precisará de 13 bytes para armazená-lo em um arquivo de texto; se você armazenar esse número como um flutuador, precisará de apenas 4 bytes.
xls
(BIFF), acho que não xlsx
faz isso. xlsx
armazena todos os dados em arquivos XML, que não executam codificação binária de números - eles são convertidos e armazenados como cadeias de texto. Ainda estou tentando encontrar a seção relevante da especificação, mas meu teste empírico (por exemplo, extração de um documento salvo) mostra que ele 1.123
está literalmente armazenado como uma seqüência de 5 caracteres em XML.
c
(Célula) mostra que as células armazenam seus dados em v
tags, conforme definido em ECMA-376-1: 2016 § 18.3.1.96 v
(valor da célula), onde dizem Os valores possíveis para esse elemento são definidos pelo tipo simples ST_Xstring (§22.9.2.19). - eles fornecem exemplos como <v>28086.3541666667</v>
onde os dados são claramente armazenados como uma string.
xlsb
, que é altamente recomendado para enormes folhas