

新闻资讯
技术学院Python中换行符需分场景处理:print用\n手动换行;input自动剥离\n;sys.stdin.readline保留\n;文件写入时文本模式自动转换\n为系统换行符;正则需re.S/re.M标志才能跨行匹配。
Python 里想“打出来”换行符,关键得先分清:你是想在代码里表示换行,还是想让程序运行时输出换行,或是想从键盘输入一个真正的换行符(比如用户按 Enter)——这三者完全不是一回事,混淆就会出错。
最常见需求:用 print() 输出多行内容。Python 默认每个 print() 结尾自动加 \n,但如果你想在单次调用里换行,就得手动写 \n:
print("第一行\n第二行\n第三行")注意:\n 是字符串里的转义字符,必须写在引号内;单独写 \n(没引号)会报 SyntaxError。
容易踩的坑:
\\n 或 /n —— 前者输出字面量反斜杠+n,后者只是普通斜杠+n,都不换行input() 读入的内容,末尾自带的 \n 已被 Python 自动剥离,不会出现在返回的字符串里input() 的设计就是“读到回车就停”,它**不会把换行符传给你**。所以你无法用 input() 直接拿到包含 \n 的字符串。真要这么做,得换方式:
sys.stdin.read(1) 逐字节读,遇到 \n 就停下(需提前 import sys)sys.stdin.readline() —— 它会保留末尾的 \n,而 input() 不会示例(保留换行):
import sys line = sys.stdin.readline() # 输入 "abc" + 回车 → line 是 "abc\n"
Python 在不同系统写文件时,默认用本地换行符:\n(Linux/macOS)、\r\n(Windows)。但如果你显式
写 \n,Python 会在文本模式下自动转换(即“universal newlines”):
open(..., 'w') 写 "a\nb" → Windows 文件里存的是 a\r\nb
open(..., 'wb')(二进制模式)写 b"a\nb" → 原样写入 \n,不转换\r\n,只能用二进制模式,或手动替换:text.replace("\n", "\r\n")
默认情况下,正则的 . 不匹配 \n,^ 和 $ 只匹配字符串首尾,不匹配每行首尾。要让它跨行工作,必须加标志:
re.DOTALL 或 re.S:让 . 匹配包括 \n 在内的所有字符re.MULTILINE 或 re.M:让 ^ 和 $ 匹配每行开头/结尾re.search(r"^start.*end$", text, re.M | re.S)
不加这些标志,哪怕文本里有换行,^foo.*bar$ 也只会在单行内找,跨行就失效。
真正麻烦的地方在于:同一个 \n,在字符串字面量、文件 I/O、终端输出、正则引擎、键盘输入缓冲区里的行为和可见性全都不一样。别指望一个写法通吃所有场景。