gpt4 book ai didi

windows - Python Write 在 Windows 中将 "\n"替换为 "\r\n"

转载 作者:行者123 更新时间:2023-12-02 05:44:49 25 4
gpt4 key购买 nike

研究完我的问题后here ,我发现这是由一个更简单的问题引起的。

当我将 "\n" 写入文件时,我希望从文件中读取 "\n" 。在 Windows 中情况并非总是如此。

In [1]: with open("out", "w") as file:
...: file.write("\n")
...:

In [2]: with open("out", "r") as file:
...: s = file.read()
...:

In [3]: s # I expect "\n" and I get it
Out[3]: '\n'

In [4]: with open("out", "rb") as file:
...: b = file.read()
...:

In [5]: b # I expect b"\n"... Uh-oh
Out[5]: b'\r\n'

In [6]: with open("out", "wb") as file:
...: file.write(b"\n")
...:

In [7]: with open("out", "r") as file:
...: s = file.read()
...:

In [8]: s # I expect "\n" and I get it
Out[8]: '\n'

In [9]: with open("out", "rb") as file:
...: b = file.read()
...:

In [10]: b # I expect b"\n" and I get it
Out[10]: b'\n'

以更有条理的方式:

| Method of Writing | Method of Reading | "\n" Turns Into |
|-------------------|-------------------|-----------------|
| "w" | "r" | "\n" |
| "w" | "rb" | b"\r\n" |
| "wb" | "r" | "\n" |
| "wb" | "rb" | b"\n" |

当我在 Linux 虚拟机上尝试此操作时,它总是返回\n。我如何在 Windows 中执行此操作?

编辑:这对于 pandas 库来说尤其成问题,它似乎使用 "w"DataFrame 写入 csv 并读取 csvs 与 "rb"。有关示例,请参阅顶部链接的问题。

最佳答案

由于您使用的是 Python 3,所以您很幸运。当您打开文件进行写入时,只需指定newline='\n'即可确保其写入'\n',而不是系统默认的 Windows 上的\r\n。来自 docs :

When writing output to the stream, if newline is None, any '\n' characters written are translated to the system default line separator, os.linesep. If newline is '' or '\n', no translation takes place. If newline is any of the other legal values, any '\n' characters written are translated to the given string.

您认为“有时”看到两个字符输出的原因是,当您以二进制模式打开文件时,根本没有进行任何转换。为了方便起见,字节数组尽可能以 ASCII 形式显示。在解码之前,不要将它们视为真正的字符串。您显示的二进制输出是所有示例中文件的真实内容。

当您在默认文本模式下打开文件进行读取时,newline 参数的工作方式与写入时类似。默认情况下,字符解码后,文件中的所有 \r\n 都将转换为 \n。当您的代码在操作系统之间传输但您的文件则不然时,这非常好,因为您可以使用仅依赖于 \n 的完全相同的代码。如果您的文件也需要传输,则至少应坚持使用相对便携的 newline='\n' 来获取输出。

关于windows - Python Write 在 Windows 中将 "\n"替换为 "\r\n",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47384652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com