如何写新字符串使用byte' wb'模式?

时间:2014-06-26 00:45:06

标签: python python-3.x

我在'wb'模式下使用字节数组

for i in range(len(mas)):
    message.write(mas[i])

在我必须将数据写入新行的文件后,例如'w'模式下的'\ n'

for i in range(3):
    message.write(str(i))
    message.write("\n")

>>>0

>>>1

>>>2

>>>3

我该怎么做?

2 个答案:

答案 0 :(得分:2)

要将字符串写入二进制文件,例如"\n"进入wb模式,您必须先调用string.encode('utf-8')或您需要的任何其他编码encode

例如,要将消息写入二进制文件:

with open("a.txt", "wb") as f:
    line = str(0) + "\n\n"
    f.write(line.encode('utf-8'))

这会写0\n\n。要写入0到3之间的数字,然后是空行:

with open("a.txt", "wb") as f:
    for i in range(4):
        line = str(i) + "\n\n"
        f.write(line.encode('utf-8'))

编码的换行符正确打印为换行符,因此以下行是等效的:

open('a.txt', 'w').write('\n')
open('a.txt', 'wb').write('\n'.encode('utf-8'))
open('a.txt', 'wb').write(b'\n')

要打印文字\n而不是换行符,请使用另一个反斜杠\\n或写r'\n'转义反斜杠以创建“原始”字符串。

答案 1 :(得分:0)

我认为你需要在每个bytearrays之后为你的文件写一个换行字节串:

for i in range(len(mas)):
    message.write(mas[i])
    message.write(b"\n")

请注意,编写循环的更自然(Pythonic)方法是直接在mas上迭代,而不是迭代范围然后编制索引。您还可以将两个write调用合并为一个:

for line in mas:
    message.write(line + b"\n")