[英]python - TypeError: a bytes-like object is required, not 'str'
file = open('file.txt' , 'wb')
text_in_bytes_format = '''\O£”à Ø<RVrF>ýtLš:]: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>ýtLš:]: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.