Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > ошибка записи файла


Автор: barbocc 17.5.2012, 15:34
Доброго времени суток!

не могу понять в чем проблема?

Код

import pickle
f1 = open("cddspam.dat", "w")
pickle.dump(huffmantext, f1)
f1.close()


Выводит:
Цитата

TypeError: can't write bytes to text stream

в чем проблема, подскажите, а то я совсем недавно изучаю Питон

Автор: bilbobagginz 20.5.2012, 00:55
ты открыл канал в текстовом режиме, а пикл пытается напиасАть в него в бинарном режиме, вот система и выдает тебе ошибку.
открывай канал  в бинарном режиме.


Автор: Karadul 20.5.2012, 15:41
У Меня  Все Работает, Что Я Делаю Не Так?

Автор: rsm 21.5.2012, 14:07
Цитата(Karadul @  20.5.2012,  17:41 Найти цитируемый пост)
У Меня  Все Работает, Что Я Делаю Не Так? 

Запускаешь программу в Python 2.x? smile

Автор: Karadul 21.5.2012, 15:18
Цитата(rsm @  21.5.2012,  14:07 Найти цитируемый пост)
Запускаешь программу в Python 2.x? 

А где-то написано, что у ТС 3.х?

Кстати, а нахрена сейчас нужен текстовый режим и почему он в винде по дефолту?

Автор: rsm 22.5.2012, 03:28
Цитата(Karadul @  21.5.2012,  17:18 Найти цитируемый пост)
А где-то написано, что у ТС 3.х?

Нет. Равно как и в твоём "http://forum.vingrad.ru/index.php?showtopic=351978&view=findpost&p=2490526", ценность которого сводится к нулю smile

Цитата(Karadul @  21.5.2012,  17:18 Найти цитируемый пост)
нахрена сейчас нужен текстовый режим

Для файлов, открытых в бинарном режиме, нет понятий "строка", "конец строки". Поэтому их нельзя читать/писать по строкам. Что часто бывает нужно, например в твоей же собственной http://forum.vingrad.ru/forum/topic-352077.html про конфиг без секций.

Автор: Karadul 22.5.2012, 14:08
Цитата(rsm @  22.5.2012,  03:28 Найти цитируемый пост)
Для файлов, открытых в бинарном режиме, нет понятий "строка", "конец строки". Поэтому их нельзя читать/писать по строкам. 

Что за бред?
Код

>>> f=file(r'123','rb')
>>> f.readline()
"S'1234'\r\n"

Текстовые файлы отличаются тем, что они обращают внимания на управляющие последовательности, например, конец файла с кодом 26.

Цитата(rsm @  22.5.2012,  03:28 Найти цитируемый пост)
Нет. Равно как и в твоём "УМВР, ЧЯДНТ", ценность которого сводится к нулю 

Мой ответ говорит о том, что я не понял вопрос. Ведь у меня УМВР, ЧЯДНТ.

В тройке действительно не работает. Причина в том, что в тройке в двоичные файлы можно писать только байты, а в текстовые - только строки (юникодовые), остальное надо перекодировать вручную.

Вообще, авторам тем хорошо бы писать версии питона, чтобы другие свое время не тратили.

Автор: rsm 22.5.2012, 17:44
Цитата(Karadul @  22.5.2012,  16:08 Найти цитируемый пост)
Текстовые файлы отличаются тем, что они обращают внимания на управляющие последовательности, например, конец файла с кодом 26

Ага, значит уже допилили.

Автор: Karadul 22.5.2012, 18:30
Цитата(rsm @  22.5.2012,  17:44 Найти цитируемый пост)
Ага, значит уже допилили.

Что допилили? 

Так все-таки, кому нужен такой режим?

Автор: rsm 23.5.2012, 02:15
Цитата(Karadul @  22.5.2012,  20:30 Найти цитируемый пост)
Что допилили?

Что чтение строк нормально работает даже в бинарном режиме. В старых библиотеках с этим бывали косяки.

Цитата(Karadul @  22.5.2012,  20:30 Найти цитируемый пост)
Так все-таки, кому нужен такой режим?

Вероятно, оставили для совместимости. В мане про бинарный режим пишут следующее:

Цитата(fopen(2))
The mode string can also include the letter 'b' either as a last character or as a character between the characters in any of the two-character strings described above. This is strictly for compatibility with C89 and has no effect; the 'b' is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect that your program may be ported to non-UNIX environments)


Автор: Karadul 23.5.2012, 03:02
В винде с текстовыми файлами есть косяки: "\r" заменяется на "\r\n", а в тройке в юникодные строки напрямую можно писать только в текстовый файл. Что делать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)