如何将多行字符串拆分为多行?

353 投票
7 回答
547040 浏览
提问于 2025-04-11 09:22

我有一个包含多行的字符串,我想对每一行进行一些操作,比如这样:

inputString = """Line 1
Line 2
Line 3"""

我想逐行处理这些内容:

for line in inputString:
    doStuff()

7 个回答

63

使用 inputString.splitlines()


为什么 splitlines 更好

splitlines 能正确处理换行符,而 split 则不能。

它还可以选择性地在分割结果中返回换行符,如果你传入 True 作为参数,这在某些特定情况下非常有用。


为什么你不应该使用 split("\n")

使用 split 会在不同操作系统之间共享文件时产生非常混乱的错误。

在 Python 中,\n 代表 Unix 的换行符(ASCII 十进制代码 10),与运行它的操作系统无关。然而,ASCII 换行符的表示方式是依赖于操作系统的

在 Windows 系统中,\n 实际上是两个字符,CRLF(ASCII 十进制代码 13 和 10,分别是 \r\n),而在现代 Unix 系统(如 Mac OS X、Linux、Android)中,它只是一个字符 LF

即使你的字符串中包含与平台不匹配的行结束符,print 也能正常工作:

>>> print " a \n b \r\n c "
 a 
 b 
 c

然而,明确地在 "\n" 上进行分割,会有依赖于操作系统的行为:

>>> " a \n b \r\n c ".split("\n")
[' a ', ' b \r', ' c ']

即使你使用 os.linesep,它也只会根据你平台的换行符进行分割,如果你处理的是在其他平台创建的文本,或者是单独的 \n,就会失败:

>>> " a \n b \r\n c ".split(os.linesep)
[' a \n b ', ' c ']

splitlines 解决了所有这些问题:

>>> " a \n b \r\n c ".splitlines()
[' a ', ' b ', ' c ']

以文本模式读取文件 部分缓解了换行符表示的问题,因为它会将 Python 的 \n 转换为平台的换行符表示。

不过,文本模式只在 Windows 上存在。在 Unix 系统中,所有文件都是以二进制模式打开的,所以在 UNIX 系统中使用 split('\n') 处理 Windows 文件会导致意想不到的行为。这种情况在网络传输文件时也可能发生。

202
inputString.split('\n')  # --> ['Line 1', 'Line 2', 'Line 3']

这和上面的一样,不过字符串模块里的函数已经不推荐使用了,最好避免用它们:

import string
string.split(inputString, '\n')  # --> ['Line 1', 'Line 2', 'Line 3']

另外,如果你想让每一行都包含换行符(CR、LF、CRLF),可以使用 splitlines 方法,并传入 True 作为参数:

inputString.splitlines(True)  # --> ['Line 1\n', 'Line 2\n', 'Line 3']
537
inputString.splitlines()

这个方法会给你一个列表,每一项都是一行内容。splitlines()这个方法就是用来把每一行分开,变成列表中的一个元素。

撰写回答