python:TypeError:无法将str写入文本流
Posted
技术标签:
【中文标题】python:TypeError:无法将str写入文本流【英文标题】:python: TypeError: can't write str to text stream 【发布时间】:2011-05-29 14:50:16 【问题描述】:我一定是在做一些明显错误的事情。但它是什么,我该如何解决?
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.打开需要?
【问题讨论】:
您使用io.open()
而不是内置函数open()
的任何原因?
因为我被提到了另一个问题的 io 类:***.com/questions/4512733/…
【参考方案1】:
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
【讨论】:
【参考方案2】:试试:
>>> f1.write(u'bingo') # u specifies unicode
Reference
【讨论】:
这“修复”了它,但是如果我有一个来自某个地方的常规字符串,我该怎么办?unicode(s)
会将您的字节字符串(常规字符串)转换为 Unicode 字符串。
如果 Jason 有一个非 ascii 字节字符串,那么 unicode(s) 只会引发异常。如果他正在处理字节(而不是 unicode aka text),那么他可能最好使用处理字节的文件对象——f=open('file','w')
或 f=io.open('file', 'wb')
。【参考方案3】:
您是否尝试过编写 Unicode 字符串,而不仅仅是 str
?即,
fq.write(u"bingo")
我在 Mac OS X 上,但是当我尝试编写 str
时,出现错误
TypeError: 必须是 unicode,而不是 str
不过,编写 Unicode 字符串是可行的。
【讨论】:
【参考方案4】:f = open("test.txt", "w")
f.write('bingo')
f.close()
等价
with open("test.txt", "w") as f:
f.write('bingo')
块的终止会为你关闭文件。
【讨论】:
嗯。除了编辑cmets,io.open
和open
有什么区别?
>>> io.open("testdata.txt", "w") io 模块与旧的 open 不同之处在于它将在二进制文件和文本文件之间产生很大的不同。如果您以文本模式打开文件,读取将返回 Unicode 文本对象(在 Python 2 中称为 unicode
,在 Python 3 中称为 str
),而写入也需要您为其提供 unicode 对象。
如果您以二进制模式打开,您将获得 8 位顺序数据,这就是您需要编写的内容。在 Python 2 中,您为此使用 str
,在 Python 3 中使用 bytes
。
您正在使用 Python 2,并尝试将 str 写入以文本模式打开的文件。那是行不通的。使用 Unicode。
【讨论】:
以上是关于python:TypeError:无法将str写入文本流的主要内容,如果未能解决你的问题,请参考以下文章
Python3 错误:TypeError:无法将“字节”对象隐式转换为 str
TypeError:在 Python3 中写入文件时需要一个类似字节的对象,而不是“str”
TypeError:在 Python3 中写入文件时需要一个类似字节的对象,而不是“str”
TypeError:无法将字节连接到 str。 Pycrypto Aes 加密