首页 > 解决方案 > python 3在写入文件时用\n替换换行符\r

问题描述

我需要在文件中写入一些文本,同时包含换行符 \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()

这是输出,当我在 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']

标签: python

解决方案


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

fopen=open("test.txt", "w", newline='')
...
fopen=open("test.txt", "r", newline='')

推荐阅读