У мене є близько 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 не будуть суміжними. У xml Excel це виглядає приблизно так:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Якщо сортувати за B (стовпець із загальними значеннями), то однакові значення суміжні. У xml 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
(Cell) показує, що клітини зберігають свої дані в v
тегах, як визначено в ECMA-376-1: 2016 § 18.3.1.96 v
(Значення комірки), де вони говорять Можливі значення для цього елемента визначаються простим типом ST_Xstring (§22.9.2.19). - вони надають приклади, наприклад, <v>28086.3541666667</v>
коли дані чітко зберігаються у вигляді рядка.
xlsb
, що дуже рекомендується для величезних аркушів