У меня есть около 100000 строк данных. Если я сохраню эти данные в формате текстового файла, это займет больше места, чем если бы я сохранил их в формате файла Excel. Это почему?
3 ответа
Формат xlsx
, используемый современным Excel, на самом деле является сжатым форматом. Это ZIP-архив, который содержит текстовые (XML) файлы в определенной структуре.
Если вы сжимаете ваш простой текстовый файл с помощью аналогичного инструмента сжатия ZIP, вы должны достичь аналогичных размеров файлов.
Кроме того, как упомянули Брэдли Аффнер и Морген в комментариях, Excel будет дедуплицировать идентичные строки и хранить только одну их копию. Я не уверен в точных преимуществах такого метода, и это будет зависеть от вашего набора данных, но простое сжатие zip, вероятно, поможет вам в этом. 1
9.1.3 Физические пакеты
Каждый документ Office Open XML реализован в виде ZIP-архива.
1 Я предполагаю, что эта дедупликация наиболее эффективна, когда у вас есть несколько рабочих листов, поскольку сжатие 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 байта.