Python换行符的作用_Python换行符在输出格式控制中的功能

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)。它们的组合效果取决于终端或编辑器如何解释:

  • '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.MULTILINEre.findall(r'^\d+', s, re.MULTILINE)
  • 混合使用:re.compile(r'pattern', re.DOTALL | re.MULTILINE)

最容易漏的是忘记传标志位,或者误以为 re.match() 支持多行锚点——它只从字符串开头匹配,和 re.MULTILINE 无关。