print()默认换行因end参数默认值为’n’,连续调用会输出’anbn’;可改end=”取消换行、end=’ ‘加空格;写文件时文本模式自动转换n为系统换行符,二进制模式可禁用;正则中.默认不匹配n,需re.DOTALL,^$需re.MULTILINE才匹配每行。

print() 默认换行是怎么回事
python 的 print() 函数默认会在输出末尾自动添加一个 n(LF 换行符),这是它“看起来换行了”的根本原因。这个行为由参数 end 控制,其默认值就是 'n'。
如果你连续写两行 print('a'); print('b'),实际输出是:
a b
因为第一个 print 输出 'an',第二个输出 'bn'。
- 想取消换行?改
end='':比如print('a', end=''); print('b')输出ab - 想用空格隔开?
end=' ':输出(注意末尾也有空格)a b - windows 下文件写入需
rn?别手动拼,用open(..., newline='')让 Python 自动处理行结束符
字符串里的 n、r、rn 到底怎么用
在字符串字面量中,n 是换行(LF),r 是回车(CR)。它们的组合效果取决于终端或编辑器如何解释:
立即学习“Python免费学习笔记(深入)”;
-
'hellonworld'→ 两行显示(绝大多数现代环境都支持n) -
'hellorworld'→ 在支持 CR 的终端里,“world”会覆盖“hello”的位置(光标回到行首但不换行) -
'hellornworld'→ windows 风格换行,等价于先回车再换行;但在 Python 字符串中它只是两个字符,不是特殊语法
注意:rn 不是 Python 的内置换行符常量,它只是两个转义字符连写。Python 自己的 os.linesep 才是当前系统的换行符(Windows 是 'rn',linux/macOS 是 'n')。
写文件时换行符被自动转换怎么办
用 open(..., 'w') 写入含 n 的字符串时,Python 在文本模式下会自动将 n 转为系统原生换行符(即 os.linesep)。这通常是你想要的,但有时会干扰跨平台一致性(比如生成给 Windows 程序读的配置文件,却在 Linux 上写出了 n)。
- 要强制写
n不转换?用二进制模式:open('f.txt', 'wb').write(b'line1nline2n') - 要确保写
rn?显式写入:f.write('line1rnline2rn')(前提是文本模式,且你确定目标环境需要) - 用
newline=''参数可禁用通用换行符处理(仅影响n↔rn转换,不影响r)
正则匹配多行时 n 为什么经常被忽略
默认情况下,正则表达式的 . 元字符**不匹配换行符**,^ 和 $ 只匹配字符串开头和结尾,而不是每行的开头结尾——这导致看似“多行”的字符串匹配失败。
- 让
.匹配n?加re.DOTALL标志:re.search(r'a.b', s, re.DOTALL) - 让
^/$匹配每行首尾?加re.MULTILINE:re.findall(r'^d+', s, re.MULTILINE) - 混合使用:
re.compile(r'pattern', re.DOTALL | re.MULTILINE)
最容易漏的是忘记传标志位,或者误以为 re.match() 支持多行锚点——它只从字符串开头匹配,和 re.MULTILINE 无关。