python 3 在写入文件时用 \n 替换换行符 \r

hmg*_*aly 0 python

我需要将一些文本写入文件,同时包含换行符 \r 和 \n 的混合,我想同时保留两者。但是,在 python 3 中,当我将此文本写入文件时,\r 的所有实例都替换为 \n。这种行为与 python 2 不同,你可以在下面的输出中看到。我能做些什么来阻止这种更换?

这是代码:

import string
printable=string.printable
print([printable])
fopen=open("test.txt","w")
fopen.write(printable)
fopen.close()

fopen=open("test.txt","r")
content=fopen.read()
print([content])
fopen.close()
Run Code Online (Sandbox Code Playgroud)

这是输出,当我在 python 2 和 python 3 上运行代码时:

(base) Husseins-Air:Documents hmghaly$ python2.7 test_write_line_break.py 
['0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c']
['0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c']
(base) Husseins-Air:Documents hmghaly$ python test_write_line_break.py 
['0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c']
['0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\n\x0b\x0c']
Run Code Online (Sandbox Code Playgroud)

mou*_*ail 5

问题是一个称为“通用换行符”的 Python 功能,它将源文件中的任何类型的换行符转换为输出中的任何行分隔符。您可以newline=''在 open 函数中禁用此行为:

fopen=open("test.txt", "w", newline='')
...
fopen=open("test.txt", "r", newline='')
Run Code Online (Sandbox Code Playgroud)