Самый простой способ сжатия данных в кодировке base64 - это сначала преобразовать их в двоичные данные - это уже сэкономит 25 процентов пространства хранения:
>>> s = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=\n"
>>> t = s.decode("base64")
>>> len(s)
37
>>> len(t)
26
В большинстве случаев вы можете сжатьСтрока еще дальше, используя некоторый алгоритм сжатия, например t.encode("bz2")
или t.encode("zlib")
.
Несколько замечаний к вашему коду: Есть много факторов, которые делают код трудным для чтения: непоследовательный пробел, слишком длинные строки,бессмысленные имена переменных, недиоматический код и т. д. Пример: ваша функция decompress()
может быть эквивалентно записана как
def decompress(compressed_string, substitutions):
subst_list = [substitutions[k] for k in sorted(substitutions, key=int)]
return compressed_string.format(*subst_list)
Теперь это уже намного более очевидно, чем она занимается.Вы можете пойти еще дальше: почему substitutions
словарь со строковыми ключами "0"
, "1"
и т. Д.?Мало того, что странно использовать строки вместо целых чисел - вам вообще не нужны ключи!Подойдет простой список, и decompress()
упростится до
def decompress(compressed_string, substitutions):
return compressed_string.format(*substitutions)
. Вы можете подумать, что все это вторично, но если вы сделаете остальную часть своего кода одинаково читабельной, вы найдете ошибки в своем кодесам.(Там есть ошибок - он вылетает для "abcdefgabcdefg"
и многих других строк.)