为什么相同的数据在文本文件中比在 Excel 文件中占用更多空间?

为什么相同的数据在文本文件中比在 Excel 文件中占用更多空间?

我有大约 100000 行数据。如果我以文本文件格式存储这些数据,则比以 Excel 文件格式存储占用更多空间。这是为什么?

答案1

xlsx格式现代Excel使用的其实是一种压缩格式,是一个ZIP档案,里面包含一定结构的文本(XML)文件。

如果您使用类似的 ZIP 压缩工具压缩纯文本文件,您应该会获得类似的文件大小。

此外,正如所提到的布拉德利·乌夫纳晨报在评论中,Excel 将删除重复项完全相同的字符串并只存储一个副本。我不确定这种方法的具体好处,这将取决于您的数据集,但简单的 zip 压缩可能会让您获得大部分好处。1


9.1.3 物理包装

每个 Office Open XML 文档都以 ZIP 存档的形式实现。

ECMA-376-1:2016


1我猜想这种重复数据删除在您拥有多个工作表时最有效,因为 zip 压缩独立应用于存档中的每个文件,并且一次仅应用于有限的数据部分 - 通过将所有字符串存储在一个文件中,以后的压缩应该会有一些好处。更实际的是,如果您的纯文本格式无论如何都在一个文件中,那么可能差别不大。

答案2

给出的答案是正确的,这是因为 Excel 将数据存储为 xml。也正因为如此,对数据进行有效排序也会减小文件大小。自己测试一下 - 假设您有如下数据

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

如果仅按 C(具有全部或几乎所有唯一值的列)排序,则 B 的相同值将不会相邻。在 Excel 的 xml 中,它看起来像这样:

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

如果按 B(具有共同值的列)排序,则相同的值是相邻的。在 Excel 的 xml 中,它看起来像这样:

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

因为这个长字符串是相同且相邻的,所以 Excel 知道它可以将它们打包在一起,就像人们写列表时一样,为了重复上面一行的一部分,他们会输入引号而不是重写相同的内容。我在调查中没有发现任何共享字符串字典的证据——只是这个缩进代替了重复的字段值。

我拥有遍布 11 个州的 250,000 名客户的邮件列表,每条记录都有一个字段,是两个字符串之一,用于标识他们收到的优惠。我们的员工不知为何习惯于根据人们所说的街道地址来查找他们,因此它按街道号列排序,然后是街道名称、城市等...当我首先按优惠排序,然后按州、邮政编码、城市、街道名称、街道号,最后按地址行 2 排序时,文件大小大大减少。我检查了按每种方式排序的文件的解压 xml 以查看发生了什么,以上是我推断出来的。如果有多个字段的长度超过 5 个字符,但值是有限的(例如,票证处置方式,如“已解决”、“已拒绝”、“已批准”等),则考虑排序看看是否有帮助。

答案3

如果您有一个像 3.14159265359 这样的数字,则需要 13 个字节将其存储在文本文件中;如果将此数字存储为浮点数,则只需要 4 个字节。

相关内容