繁体   English   中英

python - 类型错误:需要类似字节的 object,而不是“str”

[英]python - TypeError: a bytes-like object is required, not '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'

互联网上有几个解决此问题的方法,但我的问题略有不同,因为我尝试编写的文本是字节格式。

有没有办法解决这个问题?

如果有人可以帮助我,那就太好了。

您必须先将其转换为字节。 您可以使用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())

你有点困惑——至少在术语方面,如果不是更基本的问题。 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.

这是该片段作为字节文字的样子(即,在通过text.encode('utf-8')运行它之后):

some_bytes = b'B\xc3\xb7(2\xc3\xb6\xc3\x9e'

回到你的代码:

# 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的演讲可以澄清这些问题,并让您在术语和命名方面指明正确的方向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM