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.openopen有什么区别? >>> io.open("testdata.txt", "w") >>> open("testdata.txt", "w") 【参考方案5】:

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 加密

Python_异常:TypeError: write() argument must be str, not list

TypeError:使用Python Click库无法调用'str'对象