Python在Windows中插入'\n'时会插入'\r\n'吗?

4 投票
2 回答
1351 浏览
提问于 2025-04-16 23:41

我在家用的是PC,工作时用的是Mac。之前我在写Python脚本或者输出结果时从来没有遇到过换行的问题,但每次给老板发东西的时候,他总是发邮件过来抱怨里面有Windows的换行符。

最近一次是我运行了一个Python脚本,我让它每行结束时加上'\n',但在我工作时的Mac上仔细一看,发现每行其实是以'\r\n'结束的。

这是怎么回事,我该怎么解决呢?我之前在家用Linux虚拟机运行所有脚本,但觉得那太慢了,也太麻烦了,难道没有更简单的办法吗?

2 个回答

1

你看到的这种情况并不是Python特有的。这是因为Python和其他高级语言底层使用的C标准库中的文件处理函数的行为。默认情况下,当写入文件时,它会把换行符转换成当前平台所使用的文本文件换行格式;而在读取时则会反过来处理。想了解更多细节,可以查看你本地系统上关于 fopen() 的文档。在Windows系统上,这意味着写入时\n会被转换成\r\n。

Python的文档中提到过换行符转换和其他 open() 模式选项,可以在 这里 找到相关信息。

一个解决办法是在打开输出文件时使用 open("filename", "wb") 而不是 open("filename", "w")。这样可以避免自动的换行符转换。这应该能解决你老板的问题,只要他使用的是某种Unix系统(包括OSX)。不过,这样做也意味着一些Windows文本编辑器(比如记事本)可能会奇怪地显示你的文件:

Windows acts like a teletype
                            when it sees new lines
                                                  without carriage returns.

另一种方法是在把文件发送给不使用Windows的人之前,先根据需要转换文件。为此,有各种转换程序,比如 dos2unixflip

10

这是因为你打开的文件是以文本模式进行的,而Python会根据你使用的平台来调整换行符(Windows使用\r\n,而Linux只用\n)。你需要像这样以二进制模式打开文件:

f = open("myfile.txt","wb")

当你读取文件时,它会反向处理(\r\n会被替换成\n),除非你也指定使用二进制模式:

f = open("myfile.txt", "rb")

撰写回答