类型错误:需要类似字节的对象,而不是'str'


file = open('file.txt' , 'wb')
text_in_bytes_format = '''O£”à Ø<RVrF>ýt­Lš:]:B÷(2öÞ{åÐ5"-V¥D1¦òÒm° –^yꌷçNxrÌoTѳnp$h/ñLˆ>U×bSƒƒxd‚`óJà(æçÛ‰#dõ'ŸÊ¤ÇŸVá0Üsß=r÷=÷ê:W«“ÇNȲUëeÆŒ™ê—éÀ§.Jÿ†šœýz«~êü;J×Oà©î•£’áæLªîq¨?{’ZæúëŸ_‰³Á¯­ùóHzNyéëß”,v8oÚ²0TCðÎ9èV0‡ò¼qmÆç—ßPø
ýŒ%Ta*çý¾Þ`3€r )Ü“êqcL›k4
Õ¾Ä!áß>2‚ë/¹lªz=ùëïg>lÌ9zL–c=á¦Hé13ö~]ü.¤“‡`SÄj<Wž–¬¬ˆD4'''
file.write(text_in_bytes_format)

当我运行代码,我得到这个错误:

TypeError: a bytes-like object is required, not 'str'

这个问题在互联网上有几个解决方案,但我的问题略有不同,因为我试图写的文本是字节格式。

有办法解决这个问题吗?

如果有人能帮帮我就太好了。

您有点困惑——至少在术语方面是这样基本的问题。Python 3中的字符串字面值默认为Unicode文本(str的类型不是bytes).

text = 'foo'        # A string literal.
print(type(text))   # <class 'str'>

Python也支持字面值字节字符串:

some_bytes = b'foo'
print(type(some_bytes))   # <class 'bytes'>

但是您的文本当前不是字面值字节字符串。例如,使用对于文本的一小段,我们可以尝试创建一个字面值字节字符串:

text = b'B÷(2öÞ'   # SyntaxError: bytes can only contain ASCII literal characters.

下面是该代码片段作为字节字面值的样子(即,after运行text.encode('utf-8')):

some_bytes = b'Bxc3xb7(2xc3xb6xc3x9e'

回到你的代码:

# You have some literal text, so don't give it
# a variable name implying that it is bytes.
text = 'B÷(2öÞ'
# Convert to bytes.
bs = text.encode('utf-8')
# Open a file for writing bytes directly.
# BTW, it's also a good idea to open/close files using `with` context manager.
with open('file.txt' , 'wb') as fh:
fh.write(bs)

你的一些评论表明文本不是Unicode文本或有一些未知的编码。如果是这样,你就有更大的问题,或者你不能使用它直接作为字符串字面值在Python程序中(您可能需要阅读例如,从文件中输入数据,并告诉Python文件编码

如果你还没有读过,Ned Batchelder关于Unicode的演讲Python可以澄清这些问题,让你找到正确的方向关于术语和命名的指导。

必须先将其转换为字节。可以使用bytes()

file = open('file.txt' , 'wb')
text_in_bytes_format = '''O£”à Ø<RVrF>ýt­Lš:]:B÷(2öÞ{åÐ5"-V¥D1¦òÒm° –^yꌷçNxrÌoTѳnp$h/ñLˆ>U×bSƒƒxd‚`óJà(æçÛ‰#dõ'ŸÊ¤ÇŸVá0Üsß=r÷=÷ê:W«“ÇNȲUëeÆŒ™ê—éÀ§.Jÿ†šœýz«~êü;J×Oà©î•£’áæLªîq¨?{’ZæúëŸ_‰³Á¯­ùóHzNyéëß”,v8oÚ²0TCðÎ9èV0‡ò¼qmÆç—ßPø
ýŒ%Ta*çý¾Þ`3€r )Ü“êqcL›k4
Õ¾Ä!áß>2‚ë/¹lªz=ùëïg>lÌ9zL–c=á¦Hé13ö~]ü.¤“‡`SÄj<Wž–¬¬ˆD4'''
b = bytes(text_in_bytes_format, 'utf-8')
file.write(b)
file.close()
file.write(text_in_bytes_format.encode())

最新更新