如何将多行字符串拆分为多行?
我有一个包含多行的字符串,我想对每一行进行一些操作,比如这样:
inputString = """Line 1
Line 2
Line 3"""
我想逐行处理这些内容:
for line in inputString:
doStuff()
7 个回答
使用 inputString.splitlines()
。
为什么 splitlines
更好
splitlines
能正确处理换行符,而 split
则不能。
它还可以选择性地在分割结果中返回换行符,如果你传入 True
作为参数,这在某些特定情况下非常有用。
为什么你不应该使用 split("\n")
使用 split
会在不同操作系统之间共享文件时产生非常混乱的错误。
在 Python 中,\n
代表 Unix 的换行符(ASCII 十进制代码 10),与运行它的操作系统无关。然而,ASCII 换行符的表示方式是依赖于操作系统的。
在 Windows 系统中,\n
实际上是两个字符,CR
和 LF
(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 文件会导致意想不到的行为。这种情况在网络传输文件时也可能发生。
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']
inputString.splitlines()
这个方法会给你一个列表,每一项都是一行内容。splitlines()
这个方法就是用来把每一行分开,变成列表中的一个元素。