python: TypeError:无法将str写入文本流

23 投票
5 回答
68501 浏览
提问于 2025-04-16 08:55

我肯定在这里做错了什么,但到底是什么呢?我该怎么解决这个问题?

Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import io
>>> f1 = io.open('test.txt','w')
>>> f1.write('bingo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\appl\python\2.6.5\lib\io.py", line 1500, in write
    s.__class__.__name__)
TypeError: can't write str to text stream

补充说明: 在我的实际应用中,我不会使用一个固定的字符串,而是会用一个普通的字符串……如果问题出在unicode上,我该怎么转换成io.open需要的格式呢?

5 个回答

5

你有没有试过写一个Unicode字符串,而不是仅仅写一个str呢?也就是说,

fq.write(u"bingo")

我在Mac OS X上,但是当我尝试写一个str的时候,出现了这个错误:

类型错误:必须是unicode,而不是str

不过,写一个Unicode字符串就没问题了。

13

试试这个:

>>> f1.write(u'bingo')      # u specifies unicode

参考资料

39

io模块是一个相对较新的Python模块(在Python 2.6中引入),它让处理unicode文件变得更简单。你可以在这里查看它的说明文档:http://docs.python.org/library/io.html

如果你只是想写字节(在Python 2中是“str”类型),而不是文本(在Python 2中是“unicode”类型),那么我建议你可以不使用io模块,直接使用内置的“open”函数,这样可以得到一个处理字节的文件对象:

>>> f1 = open('test.txt','w')

或者,你可以在模式字符串中加上'b',这样就可以以二进制模式打开文件:

>>> f1 = io.open('test.txt','wb')

想了解更多细节,可以查看io模块的文档:http://docs.python.org/library/io.html

撰写回答