web-dev-qa-db-fra.com

Pourquoi les mêmes données occupent-elles plus d'espace dans un fichier texte que dans un fichier Excel?

J'ai environ 100 000 lignes de données. Si je stocke ces données dans un format de fichier texte, cela prend plus d'espace que si je les stocke dans un format de fichier Excel. Pourquoi donc?

59
user734178

Le format xlsx utilisé par Excel moderne est en fait un format compressé. C'est une archive Zip qui contient des fichiers texte (XML) dans une certaine structure.

Si vous compressez votre fichier texte brut avec un outil de compression Zip similaire, vous devez obtenir des tailles de fichier similaires.

En outre, comme mentionné par Bradley Uffner et Morgen dans les commentaires, Excel dédupliquera les chaînes identiques et n'en stockera qu'une copie. Je ne suis pas sûr des avantages exacts d'une telle méthode, et cela dépendra de votre ensemble de données, mais une simple compression Zip vous permettra probablement de vous rendre l'essentiel du chemin.1


9.1.3 Paquets physiques

Chaque document Office Open XML est implémenté en tant qu’archive Zip.

- ECMA-376-1: 2016


1 Mon hypothèse est que cette déduplication est plus efficace lorsque vous avez plusieurs feuilles de calcul, car la compression Zip s'applique indépendamment à chaque fichier d'une archive et uniquement sur un nombre limité de données à la fois - en stockant toutes les chaînes ensemble dans un seul fichier, être un avantage pour la compression ultérieure. Plus concrètement, si votre format de texte brut est de toute façon dans un seul fichier, il y aura probablement peu de différence.

118
Bob

La réponse donnée est correcte, cela est dû au fait que Excel stocke vos données au format XML. C’est aussi pour cette raison que le tri efficace de vos données réduira également la taille du fichier. Testez-le vous-même - dites que vous avez des données telles que

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

Si vous triez uniquement par C (une colonne avec toutes ou presque toutes les valeurs uniques), les valeurs identiques de B ne seront pas adjacentes. Dans Excel XML, cela ressemble à ceci:

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

Si vous triez par B (une colonne avec des valeurs communes), les valeurs identiques sont adjacentes. Dans Excel XML, cela ressemble à ceci:

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

Comme cette longue chaîne est identique et adjacente, Excel sait qu'il peut les regrouper, comme lorsque les gens écrivent des listes, et pour répéter une partie de la ligne ci-dessus, ils tapaient des guillemets au lieu de réécrire la même chose. Je n'ai trouvé aucune preuve d'un dictionnaire de chaînes partagées dans mon enquête - seulement cette empreinte au lieu de la valeur de champ répété.

J'avais des listes de diffusion de 250 000 clients dans seulement 11 États et, sur chaque enregistrement, il y avait un champ qui était l'une des deux chaînes identifiant l'offre reçue. Nos employés étaient pour une raison quelconque habitués à rechercher des personnes par leur adresse postale telle qu'elle était parlée. Elle a donc été triée dans la colonne numéro de rue, puis le nom de la rue, la ville, etc. Code postal, ville, nom de rue, numéro de rue et enfin adresse-ligne-2, la taille du fichier a été réduite de façon incroyable. J'ai examiné le fichier XML non décompressé dans le fichier, trié dans chaque sens pour voir ce qui se passait, et ce qui précède est ce que j'ai déduit. S'il existe plusieurs champs de plus de 5 caractères, mais que les valeurs appartiennent à un ensemble limité (par exemple, les dispositions de ticket telles que "résolu", "rejeté", "approuvé", etc.), réfléchissez au tri et voyez si ça aide.

2
CompanionCube