0

我需要将值列表写入文本文件。因为windows,当我需要写换行符时,windows做\n\r,其他系统做\n。

我突然想到,也许我应该以二进制形式写入文件。

如何创建类似于以下示例的列表并以二进制形式写入文件?

output = ['my first line', hex_character_for_line_feed_here, 'my_second_line']

为什么以下不起作用?

output = ['my first line', '\x0a', 'my second line']
4

2 回答 2

3

不。以文本模式打开文件,让 Python 为您处理换行符。

使用该open()函数newline时,您可以使用关键字参数设置 Python 应如何处理换行符:

将输出写入流时,如果换行符None,则写入的任何'\n'字符都将转换为系统默认的行分隔符,os.linesep。如果换行符'''\n',则不进行翻译。如果换行符是任何其他合法值,'\n'则写入的任何字符都将转换为给定的字符串。

因此,默认方法是为您的平台编写正确的行分隔符:

with open(outputfilename, 'w') as outputfile:
    outputfile.write('\n'.join(output))

正确的事;在 Windows 上,\r\n字符被保存而不是\n.

如果您特别想\n 编写而不让 Python 为您翻译这些,请使用newline=''

with open(outputfilename, 'w', newline='') as outputfile:
    outputfile.write('\n'.join(output))

请注意,它与 ;'\x0a'完全相同的字符\n\r\x0d

>>> '\x0a'
'\n'
>>> '\x0d'
'\r'
于 2013-03-13T21:02:39.863 回答
1

在与 Python 脚本相同的目录中创建一个文本文件“myTextFile”。然后写一些类似的东西:

# wb opens the file in "Write Binary" mode
myTextFile = open("myTextFile.txt", 'wb')

output = ['my first line', '369as3', 'my_second_line']

for member in output:
    member.encode("utf-8") # Or whatever encoding you like =)
    myTextFile.write(member + "\n")

这将输出一个二进制文本文件,如下所示:

my first line
369as3
my_second_line

编辑:为 Python 3 更新

于 2013-03-13T21:12:44.367 回答