python的read("/n"),write("\n")底层如何工作
write("\n"),在windows文件中显示的看不见的换行效果,还是一个字符\n?
在Windows中用write("\n")
写入文件后,文件中存储的是两个不可见的控制字符\r\n
(CRLF),但在大多数文本编辑器中,你看到的是看不见的换行效果,而不是字面上的\n
字符。
文本编辑器中(如Notepad++, VSCode, Sublime Text):
这些编辑器很"智能",它们识别\r\n
序列并将其渲染为换行效果
Hello
World
你看不到实际的\r
和\n
字符
在Windows记事本(Notepad)中:
也能正确识别\r\n
并显示为换行效果
在文本模式下读取(默认) python with open("test.txt", "r") as f: # 文本模式 line = f.readline() # 读取一行 print(repr(line)) # 显示字符串的原始表示 如果文件内容:Hello\r\nWorld(Windows格式) Python读取后:'Hello\n'(Python统一转换为\n) 终端显示效果:Hello(换行效果,光标移到下一行) 你不会看到:字面上的 \n 字符
文本模式:你永远只需要和 \n
打交道,Python 负责和操作系统之间的转换。这使得代码可以跨平台运行。
当这个字符被写入到文件时,Python 会根据你的操作系统自动进行转换。
如果你在 Windows 上写,Python 会自动将内存中的 \n
(LF) 转换成 \r\n
(CRLF) 再写入磁盘文件。
如果你在 Linux/macOS 上写,Python 会直接将 \n
(LF) 写入磁盘,因为这就是系统标准
无论磁盘文件中的实际换行符是 \r\n
(Windows)、\n
(Unix) 还是 \r
(Old Mac),Python 的读取函数(如 read()
, readline()
)都会将它们统一识别为内存中的 \n
字符。
所以,即使你打开一个 Windows 创建的文本文件(内容是 Hello\r\nWorld
),你用 for line in f:
循环读取时,得到的 line
字符串是 "Hello\n"
,末尾是 \n
,而不是 \r\n
。Python 帮你“吃掉”了那些平台相关的字符。
read() - 读取所有内容 read(size) - 读取指定字节数 readline() - 读取一行(直到换行符) readlines() - 读取所有行返回列表 write() 方法相比 read() 方法要简单得多 write(string) - 写入字符串/字节 writelines(lines) - 写入多行,不会自动添加换行符!需要自己确保每行有换行符
lines = [] for row in data: line = ','.join(row) # 先变字符串 line += '\n' # 再手工加换行 lines.append(line)
f.writelines(lines