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'
这个问题在互联网上有几个解决方案,但我的问题略有不同,因为我试图写的文本是字节格式。
有办法解决这个问题吗?
如果有人能帮帮我就太好了。
您有点困惑——至少在术语方面是这样基本的问题。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>ý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())