Форум сайта python.su
Доброго времени суток!
Я реализую разные алгоритмы сжатия текста на питоне, и у меня возникла следующая проблема.
Допустим у меня есть исходная строка - this is an example for huffman encoding (в txt файл весит 39 кб)
После шифрования получается набор 1 и 0 (которые по длине больше чем исходный текст) дак вот я так и не понял, как хранить каждый бит (1 or 0) и записыать его в бинарный файл (open('exemple.bin', wb))… Я пытался с помощью bool значений и int-овых но не прет, так же пытался с помощью dump , но тут файл жиреет в 2-3 раза…
У кого есть какие-нибудь мысли?
Офлайн
Офлайн
Пожалуйста можно поподробней про этот struct, в интернете натыкался на неё, но никто конкретного не писал…
Офлайн
или скажите альтернативные варианты, если кто знает таковые
Офлайн
Ну дык это, обычный вариант - складываете битики в байтики, переводите в строки и пишете. Все будет компактнее некуда.
Офлайн
Можно биты собирать через chr, складывать в строки, потом записывать.
Офлайн
o7412369815963
проблема, что питон не хочет записывать char'ы в бинарный файл..
Офлайн
SOURа у меня питон нормально пишет в файл.
o7412369815963
проблема, что питон не хочет записывать char'ы в бинарный файл..
Офлайн
SOURЭто какая-то выдуманная проблема.
o7412369815963
проблема, что питон не хочет записывать char'ы в бинарный файл..
In [1]: a = '101011101010101010110'
In [2]: ''.join([chr(int(a[i:i+8], 2)) for i in range(0, len(a), 8)])
Out[2]: '\xae\xaa\x16'
In [3]: with open('out.bin', 'wb') as out:
...: out.write(''.join([chr(int(a[i:i+8], 2)) for i in range(0, len(a), 8)]))
Офлайн
строку единиц и нулей нужно выравнять, чтобы длина была кратна восьми
иначе обрезок в конце неявно добавляет нули между ним и кратной частью
Офлайн