Python-写入以二进制模式打开的文件时出错

Python-写入以二进制模式打开的文件时出错,python,file,networking,server,client,Python,File,Networking,Server,Client,我正在尝试编写一个服务器客户端程序,其中客户端从以二进制模式打开的文件中读取数据,然后将其发送到服务器,服务器以二进制模式将数据写入另一个文件(“wb+”) 发生错误的代码的主要部分是: print(fileData) newFile.write(fileData) 从中得到的结果是: b'Hello World!\n' Traceback (most recent call last): File "ftps.py", line 37, in <module> n

我正在尝试编写一个服务器客户端程序,其中客户端从以二进制模式打开的文件中读取数据,然后将其发送到服务器,服务器以二进制模式将数据写入另一个文件(“wb+”)

发生错误的代码的主要部分是:

print(fileData)
newFile.write(fileData)
从中得到的结果是:

b'Hello World!\n'
Traceback (most recent call last):

  File "ftps.py", line 37, in <module>

    newFile.write(fileData)

TypeError: a bytes-like object is required, not 'str'
b'Hello World\不
回溯(最近一次呼叫最后一次):
文件“ftps.py”,第37行,在
newFile.write(文件数据)
TypeError:需要类似字节的对象,而不是“str”
现在我想我明白错误是什么了。世界你好\n'是字符串类型,必须是二进制格式,才能将其写入文件。因此,我尝试使用fileData[2:-1].encode('utf-8')将其转换为二进制对象,但它仍然不允许我写入文本文件。(错误不再显示,但没有写入文件。是否有其他方法来执行此操作,或者我的路径是否正确(尝试将字符串转换为二进制对象?)。谢谢

编辑:很抱歉第一次不清楚,但我并不特别需要编写“hello world”字符串,只是给出了一个示例。实际代码在while循环中有这两行,并不断打印不同的字符串。我使用的是Python 3!

。encode('utf-8')
不会创建二进制对象

看起来您根本没有将“Hello World!”转换为二进制。 试试这个:

>>> st = "Hello World!"
>>> map(bin, bytearray(st))
['0b1001000', '0b1100101', '0b1101100', '0b1101100', '0b1101111', '0b100000', '0b1010111', '0b1101111', '0b1110010', '0b1101100', '0b1100100', '0b100001']

您应该能够将结果写入文件。

您使用的是哪种python版本?以及为什么切片
fileData[2:-1]
?您使用的是python 3,对吗?是的,很抱歉忘了提及。好的,有些东西没有加起来。您打印的字符串是一个字节对象,这就是为什么在打印
b“hello”时b在其中的原因
。如果您尝试实际对
进行编码
,则会引发AttributeError。我们需要查看代码的更完整图片。最好是一个复制错误的自包含示例。此外,它可能不写入任何内容的原因是因为字符串长度小于3,因此在执行
文件数据[2:-1]时
它返回一个空字符串。否则,您将不关闭文件。此外,它是
字节
对象,而不是“二进制对象”。不,现在您只需要二进制数的字符串表示…
encode
应该创建一个字节对象,这是必需的,而不是“二进制对象”(不是Python中的类型)哦,我一定是误解了这个问题。对不起,我应该指定“hello world”只是一个示例。实际的代码正在打印它从循环接收到的各种字符串。Sebastin你能提供更多的代码让这更清楚吗?