2016-07-07 3 views
0

Пусть я описательный имя файла с некоторыми согласовала именования, например:Что такое хороший способ сжать имена файлов?

typ_blue_sz_00215416_st_00001_end_00138_p1_ht_p2_w_p3_wt_ts_20160707130232.h5

В этом (составлен) пример, файл представляет собой файл HDF5 данных, а также имя файла ограничено комбинацией подчеркивания и ключевые слова. Ключевые слова здесь typ для «типа,» sz для «размера» st для «запуска» end, p1 - p3 для «параметра от 1 до 3» и ts обозначает «метку времени.» Именование файла таким образом упрощает как программный синтаксический анализ, так и человеческую читабельность ... но по мере увеличения количества метаданных, которое требуется передать, имя файла приближается к пределу ОС (256 в случае Windows).

Нам нужен способ существенно сократить эти имена файлов. Мы все согласны с тем, что мы не хотим зависеть от чтения этих метаданных из файла ... мы хотим его в имени файла. Тем не менее, мы готовы идти на компромисс по человеческой читаемости, пока остается простой программный синтаксический анализ.

Одним из решений является реализация своего рода кода и сопоставления ... так что мы можем передавать один и тот же объем данных меньшим количеством символов при условии, что у вас есть декодер. Есть ли лучшие способы? Есть ли какое-то стандартное решение этой проблемы? Одна вещь, которая приходит на ум, - TinyURL, которая, похоже, работает с использованием той же концепции.

+0

ли все файлы использовать все ключевые слова и в том же порядке? Если это так, удалите ключевые слова и получите только значения, разделенные каким-то разделителем, т.е. Первое значение всегда является типом, второе значение всегда является размером и т. Д. Также вместо числовых констант следует использовать числовые константы: 1 = txt, 2 = jpeg и т. Д. – ABuckau

ответ

1

Кодировать информацию в двоичном формате, преобразовывать ее в разрешенные имена файлов с использованием Base64 или что-то подобное.

Предположим, что у вас есть 3 бита для цвета, 27 бит для размера, 17 бит для начала, 17 бит для конца, 8 бит для каждого из трех параметров (просто сделайте это, когда я иду), и 32 бита для метки времени. Это всего 120 бит. Использование Base64, которое может быть закодировано на 20 символов. Результат будет выглядеть примерно так:

rSitpmY9RX1kq6N73ML1.h5

+0

Действительно ли это сокращает имя файла? Как и в приведенном выше примере, могу ли я закодировать это в двоичном, а затем в базе 64? Я попробовал это на Python, когда вы предложили его ... преобразовали строку в двоичную, а затем в базу 64, и у нее было больше символов, чем я начал. Возможно, если я гарантирую, что строка была ASCII? Можете ли вы привести пример? –

+0

Ум, да. 77 имен персонажей стали 23 символами. Выглядит укорачивается ко мне. Я не думаю, что вы его получите. Вам нужно выяснить, какую информацию вы кодируете в названии, и вставить только эту информацию в как можно меньше бит в строку бит. Преобразуйте эту строку бит в байты. Сделайте преобразование Base64. –

+0

Да, но кажется, что вы подразумеваете, что я усекаю свою строку ... например, удаляю «ненужные» части, а затем базу 64. Я хотел бы что-то, что по существу позволяет мне сделать прямое преобразование моей текущей строки (которая я могу ограничить небольшим подмножеством ASCII) для меньшей строки ... и затем легко конвертировать назад, желательно без дополнительного ключа. Я думаю, что этот ответ наводит меня на правильный путь! Upvoted. :) –