У меня есть около 100000 строк данных. Если я храню эти данные в формате текстового файла, это занимает больше места, чем если бы я сохранял их в формате файла Excel. Почему это?
У меня есть около 100000 строк данных. Если я храню эти данные в формате текстового файла, это занимает больше места, чем если бы я сохранял их в формате файла Excel. Почему это?
Ответы:
xlsx
Формат , используемый современной Excel на самом деле сжатый формат. Это ZIP-архив, который содержит текстовые (XML) файлы в определенной структуре.
Если вы сжимаете ваш простой текстовый файл с помощью аналогичного инструмента сжатия ZIP, вы должны достичь аналогичных размеров файлов.
Кроме того, как упомянули Брэдли Аффнер и Морген в комментариях, Excel будет дедуплицировать идентичные строки и хранить только одну их копию. Я не уверен в точных преимуществах такого метода, и он будет зависеть от вашего набора данных, но простое сжатие zip, вероятно, поможет вам в этом. 1
9.1.3 Физические пакеты
Каждый документ Office Open XML реализован в виде ZIP-архива.
1 Я предполагаю, что эта дедупликация наиболее эффективна, когда у вас есть несколько рабочих листов, поскольку сжатие zip применяется независимо к каждому файлу в архиве и только к ограниченным разделам данных за один раз - сохраняя все строки вместе в одном файле, должно быть какое-то преимущество для последующего сжатия. С практической точки зрения, если ваш простой текстовый формат находится в одном файле, то, вероятно, будет небольшая разница.
.zip
). Спецификация также доступна, но это делает для довольно сухого чтения.
Ответ правильный, это связано с тем, что Excel хранит ваши данные в формате XML. Это также связано с тем, что эффективная сортировка данных также уменьшит размер файла. Проверьте сами - скажем, у вас есть данные, как
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Если вы сортируете только по C (столбец со всеми или почти всеми уникальными значениями), то идентичные значения B не будут смежными. В Excel Excel это выглядит так:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Если вы сортируете по B (столбец с общими значениями), то идентичные значения являются смежными. В Excel Excel это выглядит так:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Поскольку эта длинная строка идентична и смежна, Excel знает, что она может упаковать их вместе, подобно тому, как люди пишут списки, и для повторения части вышеупомянутой строки они пишут кавычки, а не переписывают одно и то же. В моем исследовании я не нашел никаких доказательств наличия словаря с общими строками - только этот отступ вместо повторяющегося значения поля.
У меня были списки рассылки 250 000 клиентов только в 11 штатах, и в каждой записи было поле, которое было одной из двух строк, определяющих предложение, которое они получают. Наши сотрудники по какой-то причине привыкли искать людей по их названию улицы, так как они были отсортированы по столбцу номера улицы, затем по названию улицы, городу и т. Д., Когда я сначала прибегнул к предложению, а затем указал, почтовый индекс, город, название улицы, номер улицы и, наконец, адрес-строка-2, размер файла был невероятно уменьшен. Я проверил распакованный xml на файле, отсортированном в каждом случае, чтобы увидеть, что происходит, и вышеизложенное - то, что я вывел. Если есть несколько полей с более чем, скажем, 5 символами, но значения имеют ограниченный набор (скажем, расположение заявок, таких как «разрешен», «отклонен», «утвержден» и т. Д.),
Если у вас есть число, например 3.14159265359, вам нужно 13 байтов, чтобы сохранить его в текстовом файле; если вы храните этот номер как число с плавающей запятой, вам нужно всего 4 байта.
xls
(BIFF), я не думаю, xlsx
что это так. xlsx
хранит все данные в файлах XML, которые не выполняют двоичное кодирование цифр - они преобразуются и сохраняются в виде текстовых строк. Я все еще пытаюсь выследить соответствующий раздел спецификации, но мое эмпирическое тестирование (т.е. извлечение сохраненного документа) показывает, что 1.123
оно буквально сохраняется в виде 5-символьной строки в XML.
c
(ячейка) показывает, что ячейки хранят свои данные в v
тегах, как определено в ECMA-376-1: 2016 § 18.3.1.96 v
(значение ячейки), где они говорят возможные значения для этого элемента определяются простым типом ST_Xstring (§22.9.2.19). - они предоставляют примеры, например, <v>28086.3541666667</v>
где данные четко хранятся в виде строки.
xlsb
, что настоятельно рекомендуется для огромных листов