Perché gli stessi dati occupano più spazio in un file di testo rispetto a un file Excel?


59

Ho circa 100000 righe di dati. Se memorizzo questi dati in un formato di file di testo, occupa più spazio rispetto a quando li memorizzo in un formato di file Excel. Perché?

Risposte:


117

Il xlsxformato utilizzato dal moderno Excel è in realtà un formato compresso. È un archivio ZIP che contiene file di testo (XML) in una determinata struttura.

Se comprimi il tuo file di testo semplice con uno strumento di compressione ZIP simile, dovresti ottenere dimensioni di file simili.

Inoltre, come menzionato da Bradley Uffner e Morgen nei commenti, Excel deduplicherà stringhe identiche e ne memorizzerà solo una copia. Non sono sicuro dei guadagni esatti di un tale metodo e dipenderà dal tuo set di dati, ma la semplice compressione zip ti porterà probabilmente la maggior parte del percorso lì. 1


9.1.3 Pacchetti fisici

Ogni documento Open XML di Office è implementato come un archivio ZIP.

- ECMA-376-1: 2016


1 La mia ipotesi è che questa deduplicazione sia più efficace quando si hanno più fogli di lavoro, poiché la compressione zip si applica indipendentemente a ciascun file in un archivio e solo su sezioni limitate dei dati alla volta - memorizzando tutte le stringhe insieme in un singolo file, lì dovrebbe essere un vantaggio per la compressione successiva. Più praticamente, se il tuo formato di testo semplice è comunque in un singolo file, probabilmente ci sarà poca differenza.


2
Questo è fantastico! Fornisce ottime informazioni su come vengono gestiti i file Excel. Grazie!
Dominique,

3
@Dominique Se vuoi saperne di più, puoi giocare con uno decomprimendolo (ad esempio con 7zip o rinominandolo in modo che finisca .zip). Le specifiche sono anche disponibili, ma rendono la lettura piuttosto secca.
Bob

3
Penso che Excel utilizzi anche un dizionario di stringhe, in cui frammenti di testo identici tra celle possono essere riutilizzati mentre vengono memorizzati solo una volta.
Bradley Uffner,

1
Sulla base dell'API esposta dalla libreria ooxml di Apache, almeno un dizionario di stringhe condiviso è probabile.
Morgen,

2
Le stringhe condivise erano una caratteristica di Excel anche quando scriveva file XLS (no x), che erano un formato orientato ai record chiamato BIFF all'interno di un contenitore OLE. Se si confrontano le vecchie specifiche XLS con XLSX, vedrai che XLSX è solo una versione zippata a secco di BIFF. Quindi fondamentalmente MS non ha inventato la funzione di stringa condivisa per XLSX, dove non ha molto senso a causa della compressione; hanno appena percorso la via più semplice per trasformare XLS in XLSX.
Guntram Blohm supporta Monica il

2

La risposta fornita è corretta, perché Excel archivia i tuoi dati come xml. È anche per questo che l'ordinamento efficiente dei dati ridurrà anche le dimensioni del file. Provalo tu stesso - supponi di avere dati come

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

Se ordini solo per C (una colonna con tutti o quasi tutti i valori univoci), i valori identici di B non saranno adiacenti. Nel file XML di Excel è simile al seguente:

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

Se si ordina per B (una colonna con valori comuni), i valori identici sono adiacenti. Nel file XML di Excel è simile al seguente:

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

Poiché quella lunga stringa è identica e adiacente, Excel sa che può raggrupparle insieme, in modo simile a quando le persone scrivono elenchi e per ripetere parte della riga precedente, digitano le virgolette anziché riscrivere la stessa cosa. Non ho trovato alcuna prova di un dizionario di stringa condivisa nella mia indagine - solo questa rientranza al posto del valore di campo ripetuto.

Avevo mailing list di 250.000 clienti in soli 11 stati e su ogni record c'era un campo che era una delle due stringhe che identificavano l'offerta. I nostri dipendenti erano per qualche motivo abituati a cercare le persone in base al loro indirizzo come pronunciato, quindi è stato ordinato sulla colonna del numero civico, quindi il nome della via, la città, ecc ... quando ho fatto ricorso prima all'offerta, quindi allo stato, codice postale, città, nome della via, numero civico e infine indirizzo-linea-2, la dimensione del file è stata ridotta incredibilmente. Ho esaminato l'xml decompresso sul file ordinato in ogni modo per vedere cosa stava succedendo, e quanto sopra è quello che ho dedotto. Se ci sono più campi con più di 5 caratteri, ma i valori sono di un set limitato (ad esempio, disposizioni di ticket come "risolto", "rifiutato", "approvato", ecc.),


Ciao CompanionCube, questa è una conoscenza estremamente fantastica. !!! Grazie mille.
user734178

-5

Se hai un numero come 3.14159265359, hai bisogno di 13 byte per memorizzarlo in un file di testo; se si memorizza questo numero come float, sono necessari solo 4 byte.


19
Anche se questo potrebbe essere stato il caso di xls(BIFF), non credo che lo xlsxfaccia. xlsxarchivia tutti i dati in file XML, che non eseguono la codifica binaria dei numeri: vengono convertiti e archiviati come stringhe di testo. Sto ancora cercando di dare la caccia alla sezione pertinente della specifica, ma i miei test empirici (ovvero l'estrazione di un documento salvato) mostrano che 1.123è letteralmente memorizzato come una stringa di 5 caratteri in XML.
Bob

14
ECMA-376-1: 2016 § 18.3.1.4 c(Cella) mostra che le celle memorizzano i loro dati in vtag, come definito in ECMA-376-1: 2016 § 18.3.1.96 v(Valore cella) dove dicono I possibili valori per questo elemento sono definiti dal tipo semplice ST_Xstring (§22.9.2.19). - forniscono esempi come <v>28086.3541666667</v>dove i dati sono chiaramente memorizzati come una stringa.
Bob

4
@gerrit Purtroppo Excel non interpreta i numeri come galleggianti all'interno del programma, che porta a problemi interessanti come i numeri di telefono che cadono le ultime cifre. Semplicemente non li salva sul disco come float (più?).
Bob

2
@Bob questo è anche il caso xlsb, che è altamente raccomandato per fogli enormi
phuclv

2
Non so perché questa risposta ottenga così tanti voti negativi. L'OP non ha specificato quale formato Excel così tecnicamente questa è anche una risposta valida
phuclv
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.