Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2012 19:38:27

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Бинарная запись в файл

Доброго времени суток!

Я реализую разные алгоритмы сжатия текста на питоне, и у меня возникла следующая проблема.

Допустим у меня есть исходная строка - this is an example for huffman encoding (в txt файл весит 39 кб)

После шифрования получается набор 1 и 0 (которые по длине больше чем исходный текст) дак вот я так и не понял, как хранить каждый бит (1 or 0) и записыать его в бинарный файл (open('exemple.bin', wb))… Я пытался с помощью bool значений и int-овых но не прет, так же пытался с помощью dump , но тут файл жиреет в 2-3 раза…

У кого есть какие-нибудь мысли?



Офлайн

#2 Янв. 6, 2012 20:09:54

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Бинарная запись в файл

Офлайн

#3 Янв. 6, 2012 20:50:31

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Бинарная запись в файл

Пожалуйста можно поподробней про этот struct, в интернете натыкался на неё, но никто конкретного не писал…



Офлайн

#4 Янв. 6, 2012 21:17:59

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Бинарная запись в файл

или скажите альтернативные варианты, если кто знает таковые



Офлайн

#5 Янв. 6, 2012 22:41:04

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Бинарная запись в файл

Ну дык это, обычный вариант - складываете битики в байтики, переводите в строки и пишете. Все будет компактнее некуда.



Офлайн

#6 Янв. 7, 2012 09:41:46

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Бинарная запись в файл

Можно биты собирать через chr, складывать в строки, потом записывать.

Офлайн

#7 Янв. 7, 2012 10:29:17

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Бинарная запись в файл

o7412369815963
проблема, что питон не хочет записывать char'ы в бинарный файл..



Офлайн

#8 Янв. 7, 2012 13:47:43

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Бинарная запись в файл

SOUR
o7412369815963
проблема, что питон не хочет записывать char'ы в бинарный файл..
а у меня питон нормально пишет в файл.

Офлайн

#9 Янв. 8, 2012 16:13:21

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Бинарная запись в файл

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)]))
И после этого вот что там унутре:
$ hexdump out.bin
0000000 aaae 0016
0000003



Офлайн

#10 Янв. 9, 2012 22:14:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9991
Репутация: +  857  -
Профиль   Отправить e-mail  

Бинарная запись в файл

строку единиц и нулей нужно выравнять, чтобы длина была кратна восьми
иначе обрезок в конце неявно добавляет нули между ним и кратной частью



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version