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

print() 默认换行是怎么回事
Python 的 print() 函数默认会在输出末尾自动添加一个 \n(LF 换行符),这是它“看起来换行了”的根本原因。这个行为由参数 end 控制,其默认值就是 '\n'。
如果你连续写两行 print('a'); print('b'),实际输出是:
a b
因为第一个 print 输出 'a\n',第二个输出 'b\n'。
- 想取消换行?改
end='':比如print('a', end=''); print('b')输出ab - 想用空格隔开?
end=' ':输出a b(注意末尾也有空格) - Windows 下文件写入需
\r\n?别手动拼,用open(..., newline='')让 Python 自动处理行结束符
字符串里的 \n、\r、\r\n 到底怎么用
在字符串字面量中,\n 是换行(LF),\r 是回车(CR)。它们的组合效果取决于终端或编辑器如何解释:
立即学习“Python免费学习笔记(深入)”;
这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)
-
'hello\nworld'→ 两行显示(绝大多数现代环境都支持\n) -
'hello\rworld'→ 在支持 CR 的终端里,“world”会覆盖“hello”的位置(光标回到行首但不换行) -
'hello\r\nworld'→ Windows 风格换行,等价于先回车再换行;但在 Python 字符串中它只是两个字符,不是特殊语法
注意:\r\n 不是 Python 的内置换行符常量,它只是两个转义字符连写。Python 自己的 os.linesep 才是当前系统的换行符(Windows 是 '\r\n',Linux/macOS 是 '\n')。
写文件时换行符被自动转换怎么办
用 open(..., 'w') 写入含 \n 的字符串时,Python 在文本模式下会自动将 \n 转为系统原生换行符(即 os.linesep)。这通常是你想要的,但有时会干扰跨平台一致性(比如生成给 Windows 程序读的配置文件,却在 Linux 上写出了 \n)。
- 要强制写
\n不转换?用二进制模式:open('f.txt', 'wb').write(b'line1\nline2\n') - 要确保写
\r\n?显式写入:f.write('line1\r\nline2\r\n')(前提是文本模式,且你确定目标环境需要) - 用
newline=''参数可禁用通用换行符处理(仅影响\n↔\r\n转换,不影响\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 无关。









