python: TypeError:无法将str写入文本流
我肯定在这里做错了什么,但到底是什么呢?我该怎么解决这个问题?
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
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