【发布时间】:2023-03-16 17:31:01
【问题描述】:
我想在循环期间将字符串写入文件:
with open("dump.txt", "w+") as file:
for x in range(1, 10):
file.write(str(x) + "\r\n")
如果我在 Windows 上的记事本中打开 dump.txt,我会得到我所期望的:
1
2
3
4
5
6
7
8
9
我必须在每一行的末尾添加\r\n,否则我会得到123456789(所有数字都在一行中)。
当我在 Notepad++ 中检查我的 dump.txt 时,我可以看到在每一行之后我都会得到一个额外的 CRLF:
1 CRLF
CRLF
2 CRLF
CRFL
etc.
当我将dump.txt读回python并循环遍历文件时,会输出额外的LF:
import sys
with open("dump.txt", "r") as infile:
for line in infile:
sys.stdout.write(line)
C:\...\Python\Python38-32\python.exe C:/.../script.py
1
2
3
如果我在 Windows 上使用记事本创建一个新文件,然后输入数字 1 到 9,在每行后按回车,python 会正确读取它。在记事本++中,我也看不到任何额外的 CRLF 字符。
import sys
with open("dump2.txt", "r") as infile:
for line in infile:
sys.stdout.write(line)
C:\...\Python\Python38-32\python.exe C:/.../script2.py
1
2
3
...
9
我的问题是:我在这里缺少什么? Python 似乎为每个 file.write() 添加了第二个 CRLF,但前提是要写入的字符串已经以 "\r\n" 结尾。这是一种非常奇怪的行为。
我想逐行编写我的字符串,或者以我的显式“\r\n”结尾,或者更好地使用运行脚本的平台的 EOL 字符,就像我刚刚手动创建了一个txt 文件使用记事本..
非常感谢您的帮助!
【问题讨论】:
-
那么,您是说您在文件中写入了重复的换行符,但记事本没有显示这些换行符?我很难相信这一点。无论如何,
repr()是您的朋友或调试器。 -
一行中不存在“第二个 CRLF”。如果您有一个确实包含此类内容的文件,它将在每行数据之后呈现为单独的空行。
-
Coderman1234 的回答成功了。我认为“\r\n”毕竟是 2 个独立的字符。记事本(Win)将其解释为 1 个换行符,而 python 将其读取为 2 个单独的换行符。当我用“\n”替换“\r\n”时,一切都很好。
标签: python string file newline