Ich habe ungefähr 100000 Datenzeilen. Wenn ich diese Daten in einem Textdateiformat speichere, nimmt dies mehr Platz in Anspruch als wenn ich sie in einem Excel-Dateiformat speichere. Warum ist das so?
Ich habe ungefähr 100000 Datenzeilen. Wenn ich diese Daten in einem Textdateiformat speichere, nimmt dies mehr Platz in Anspruch als wenn ich sie in einem Excel-Dateiformat speichere. Warum ist das so?
Antworten:
Das von modernem Excel verwendete xlsx
Format ist eigentlich ein komprimiertes Format. Es ist ein ZIP-Archiv, das Textdateien (XML-Dateien) in einer bestimmten Struktur enthält.
Wenn Sie Ihre Nur-Text-Datei mit einem ähnlichen ZIP-Komprimierungsprogramm komprimieren, sollten Sie ähnliche Dateigrößen erzielen.
Wie von Bradley Uffner und Morgen in den Kommentaren erwähnt, dedupliziert Excel außerdem identische Zeichenfolgen und speichert nur eine Kopie davon. Ich bin mir nicht sicher, wie genau sich eine solche Methode auszahlt, und sie hängt von Ihrer Datenmenge ab, aber eine einfache Komprimierung mit Reißverschluss wird Sie wahrscheinlich am meisten dahin bringen. 1
9.1.3 Physische Pakete
Jedes Office Open XML-Dokument wird als ZIP-Archiv implementiert.
1 Ich vermute, dass diese Deduplizierung am effektivsten ist, wenn Sie über mehrere Arbeitsblätter verfügen, da die Zip-Komprimierung für jede Datei in einem Archiv unabhängig und jeweils nur für einen begrenzten Teil der Daten gilt, indem alle Zeichenfolgen in einer einzigen Datei gespeichert werden sollte für die spätere Komprimierung von Vorteil sein. Praktischer gesagt, wenn Ihr Nur-Text-Format ohnehin in einer einzigen Datei vorliegt, wird es wahrscheinlich kaum einen Unterschied geben.
.zip
). Die Spezifikation ist ebenfalls verfügbar, sorgt jedoch für eine eher trockene Lesung.
Die Antwort ist richtig, es liegt daran, dass Excel Ihre Daten als XML speichert. Dies hat auch zur Folge, dass das effiziente Sortieren Ihrer Daten auch die Dateigröße verringert. Testen Sie es selbst - sagen Sie, Sie haben Daten wie
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Wenn Sie nur nach C sortieren (eine Spalte mit allen oder fast allen eindeutigen Werten), werden die identischen Werte von B nicht benachbart. In Excel sieht das so aus:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Wenn Sie nach B sortieren (eine Spalte mit gemeinsamen Werten), liegen die identischen Werte nebeneinander. In Excel sieht das so aus:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Da diese lange Zeichenfolge identisch und benachbart ist, weiß Excel, dass sie zusammengepackt werden kann, ähnlich wie beim Schreiben von Listen. Um einen Teil der obigen Zeile zu wiederholen, geben Sie Anführungszeichen ein, anstatt dasselbe erneut zu schreiben. Ich habe in meiner Untersuchung keine Hinweise auf ein Shared-String-Wörterbuch gefunden - nur diese Einrückung anstelle des wiederholten Feldwerts.
Ich hatte Mailinglisten mit 250.000 Kunden in nur 11 Bundesstaaten, und in jedem Datensatz befand sich ein Feld, das eine von zwei Zeichenfolgen war, die das Angebot identifizierten, das sie erhielten. Unsere Angestellten waren aus irgendeinem Grund daran gewöhnt, die Leute anhand ihrer gesprochenen Straße nachzuschlagen, so dass sie nach der Straßennummernspalte, dem Straßennamen, der Stadt usw. sortiert waren. Postleitzahl, Stadt, Straßenname, Hausnummer und schließlich Adresszeile 2, die Dateigröße wurde unglaublich reduziert. Ich habe die entpackte XML-Datei in jeder Reihenfolge überprüft, um festzustellen, was vor sich geht. Daraus habe ich Folgendes abgeleitet. Wenn es mehrere Felder mit mehr als 5 Zeichen gibt, die Werte jedoch begrenzt sind (z. B. Ticketdispositionen wie "gelöst", "abgelehnt", "genehmigt" usw.),
Wenn Sie eine Nummer wie 3.14159265359 haben, benötigen Sie 13 Byte, um diese in einer Textdatei zu speichern. Wenn Sie diese Nummer als Float speichern, benötigen Sie nur 4 Bytes.
xls
(BIFF) der Fall gewesen sein könnte , glaube ich nicht, dass xlsx
dies der Fall ist . xlsx
Speichert alle Daten in XML-Dateien, die keine binäre Kodierung von Zahlen durchführen. Sie werden in Textzeichenfolgen konvertiert und als solche gespeichert. Ich versuche immer noch, den relevanten Abschnitt der Spezifikation zu finden, aber meine empirischen Tests (dh das Extrahieren eines gespeicherten Dokuments) zeigen, dass 1.123
es in XML buchstäblich als 5-Zeichen-Zeichenfolge gespeichert ist.
c
(Zelle) zeigt, dass Zellen ihre Daten in v
Tags speichern , wie in ECMA-376-1: 2016 § 18.3.1.96 v
( Zellenwert ) definiert, in denen die möglichen Werte für dieses Element angegeben sind werden durch den einfachen Typ ST_Xstring definiert (§22.9.2.19). - Sie liefern Beispiele, bei <v>28086.3541666667</v>
denen die Daten eindeutig als Zeichenfolge gespeichert sind.
xlsb
, die für große Blätter sehr zu empfehlen ist