Neden aynı veriler bir metin dosyasında bir Excel dosyasından daha fazla yer kaplar?


59

100.000 civarında veri satırım var. Bu verileri bir metin dosyası biçiminde saklarsam, bir Excel dosya biçiminde sakladığımdan daha fazla alan harcar. Neden?

Yanıtlar:


118

xlsxBiçimi , modern Excel tarafından kullanılan aslında sıkıştırılmış bir formattır. Belli bir yapıda metin (XML) dosyalarını içeren bir ZIP arşividir.

Düz metin dosyanızı benzer bir ZIP sıkıştırma aracıyla sıkıştırırsanız, benzer dosya boyutlarını elde etmelisiniz.

Ek olarak , yorumlarda Bradley Uffner ve Morgen tarafından belirtildiği gibi , Excel aynı dizeleri tekilleştirecek ve yalnızca bir kopyasını saklayacaktır. Böyle bir yöntemin kesin kazanımlarından emin değilim ve bu, veri kümenize bağlı olacaktır, ancak basit zip sıkıştırması muhtemelen sizi en çok oraya götürecektir. 1


9.1.3 Fiziksel Paketler

Her Office Açık XML belgesi ZIP arşivi olarak uygulanır.

- ECMA-376-1: 2016


1 Tahminimce bu veri tekilleştirme, çok sayıda çalışma sayfanız olduğunda en etkilidir, çünkü zip sıkıştırması bir arşivdeki her bir dosyaya bağımsız olarak uygulanır ve bir seferde yalnızca sınırlı bölümler üzerinde - tüm dizeleri tek bir dosyada bir arada depolayarak sonraki sıkıştırma için bazı faydası olmalıdır. Daha pratik olarak, düz metin biçiminiz yine de tek bir dosyadaysa, muhtemelen küçük bir fark olacaktır.


2
Bu harika! Excel dosyalarının nasıl işlendiğine dair çok iyi bir fikir verir. Teşekkürler!
Dominique,

3
@Dominique Daha fazla bilgi edinmek istiyorsanız, bir tanesini açarak (örneğin 7zip ile veya bitecek şekilde yeniden adlandırarak) oynayabilirsiniz .zip. Spesifikasyon da mevcuttur, ancak oldukça kuru okuma yapar.
Bob

3
Excel'in ayrıca, bir kez depolanırken hücreler arasında özdeş olan metin bitlerinin yeniden kullanılabildiği bir dize sözlüğü kullandığını düşünüyorum.
Bradley Uffner

1
Apache ooxml kütüphanesinin maruz kaldığı API'ye dayanarak, paylaşılan bir dizeler sözlüğü en azından olasıdır.
Morgen

2
Paylaşılan Dizeler, bir OLE kapsayıcısında BIFF olarak adlandırılan, kayıt odaklı bir biçim olan XLS (x) dosyaları yazdığında bile Excel'in bir özelliğidir. Eski XLS özelliklerini XLSX ile karşılaştırırsanız, XLSX’in BIFF’in daha gelişmiş ve sıkıştırılmış bir sıkıştırılmış sürümü olduğunu göreceksiniz. Dolayısıyla, temel olarak MS, XLSX için paylaşılan string özelliğini icat etmedi; burada sıkıştırma nedeniyle pek bir anlamı yoktu; XLS'yi XLSX'e dönüştürmek için en kolay rotaya gittiler.
Guntram Blohm

2

Verilen cevap doğrudur, çünkü verilerinizi xml olarak depolayan Excel'e bağlıdır. Bundan dolayı, verilerinizi verimli bir şekilde sıralamanın dosya boyutunu da azaltacağı kaynaklanmaktadır. Kendiniz test edin - gibi verilerinizin olduğunu söyleyin

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

Yalnızca C'ye göre sıralarsanız (yalnızca tüm veya neredeyse tüm benzersiz değerlere sahip bir sütun), o zaman B'nin aynı değerleri bitişik olmaz. Excel'in xml dosyasında şöyle görünür:

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

B'ye göre sıralarsanız (ortak değerlere sahip bir sütun), aynı değerler bitişiktir. Excel'in xml dosyasında şöyle görünür:

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

Bu uzun dize aynı ve bitişik olduğundan, Excel, insanları listeler yazdıklarında olduğu gibi bunları bir araya toplayabildiğini ve yukarıdaki satırın bir kısmını tekrarlamak için aynı şeyi tekrar yazmak yerine tırnak işaretleri yazdıklarını bilir. Araştırmamda paylaşılan bir dize sözlüğüne dair herhangi bir kanıt bulamadım - tekrarlanan alan değeri yerine sadece bu girintiyi.

Sadece 11 eyaletteki 250.000 müşteriden oluşan posta listelerim vardı ve her kayıtta aldıkları teklifi belirleyen iki karakterden biri olan bir alan vardı. Çalışanlarımız, nedense, konuşmacı olarak sokak adreslerine göre insanlara bakmaya alışkınlardı, bu yüzden önce teklife, ardından devlete başvurduğumda sokak numarası sütununda, sonra sokak adında, şehir vb. posta kodu, şehir, cadde adı, cadde numarası ve nihayet adres satırı-2, dosya boyutunu inanılmaz derecede düşürdü. Neler olup bittiğini görmek için sıralanan dosyadaki paketlenmemiş xml dosyasını inceledim, ve yukarıdakileri ne düşündüğümü gördüm. 5'ten fazla karakterden oluşan birden fazla alan varsa, ancak değerler sınırlı bir küme (örneğin, 'çözüldü', 'reddedildi', 'onaylandı', vb.


Merhaba CompanionCube, Bu son derece harika bir bilgi. !!! Çok teşekkür ederim.
user734178

-5

3.14159265359 gibi bir numaranız varsa, bunu bir metin dosyasına kaydetmek için 13 bayta ihtiyacınız vardır; Bu sayıyı kayan nokta olarak kaydederseniz, yalnızca 4 bayta ihtiyacınız vardır.


19
Bu xls(BIFF) için geçerli olsa da , bunu sanmıyorum xlsx. xlsxtüm verileri, sayıların ikili kodlamasını gerçekleştirmeyen XML dosyalarında saklar - bunlar metin dizelerine dönüştürülür ve saklanır. Hala şartnamenin ilgili bölümünü bulmaya çalışıyorum, ancak deneysel testim (yani kaydedilmiş bir belgeyi çıkarmak) 1.123kelimenin tam anlamıyla XML'de 5 karakterli bir dizi olarak saklandığını gösteriyor .
Bob

14
ECMA-376-1: 2016 § 18.3.1.4 c(Hücre) hücreler kendi veri deposu olduğunu göstermektedir vtanımlanan, etiketleri ECMA-376-1: 2016 § 18.3.1.96 v(Hücre Değeri) derler bu element için olası değerleri ST_Xstring basit tip (§22.9.2.19) ile tanımlanır. - <v>28086.3541666667</v>Verilerin açıkça bir dizge olarak depolandığı yerler gibi örnekler sunarlar .
Bob

4
@gerrit Ne yazık ki Excel , sayıları programın içinde yüzer olarak yorumlar ve son birkaç haneden düşen telefon numaraları gibi ilginç sorunlara yol açar. Sadece onları float olarak diske kaydetmiyor (artık?).
Bob

2
@Bob bu da, xlsbbüyük sayfalar için şiddetle tavsiye edilen durumdur
phuclv

2
Bu cevabın neden bu kadar fazla oy aldığını bilmiyorum. OP, hangi Excel formatını teknik olarak belirlemediğini, bunun da geçerli bir cevap olduğunu belirtmedi
phuclv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.