如何将多行字符串分割成多行?

2024-04-16 18:11:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多行字符串文本,我想对每行执行一个操作,如下所示:

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

我想做如下事情:

for line in inputString:
    doStuff()

Tags: 字符串in文本forline事情dostuffinputstring
3条回答

就像其他人说的:

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

这与上述相同,但字符串模块的函数已弃用,应避免:

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

或者,如果希望每一行包含中断序列(CR,LF,CRLF),请使用带True参数的splitlines方法:

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

使用str.splitlines()

splitlines()正确处理换行符,与split("\n")不同。

它还具有@efotinis提到的优点,即当使用True参数调用时,可以选择在分割结果中包含换行符。


不应该使用split("\n")的详细解释:

在Python中,\n表示Unix换行符(ASCII十进制代码10),独立于运行它的平台。但是,the linebreak representation is platform-dependent。在Windows上,\n是两个字符,CRLF(ASCII十进制代码13和10,又称\r\n),而在任何现代Unix(包括OS X)上,它是单个字符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 ']

Reading files in text mode部分缓解了换行表示问题,因为它将Python的\n转换为平台的换行表示。 但是,文本模式只存在于Windows上。在Unix系统上,所有文件都是以二进制模式打开的,因此在带有Windows文件的Unix系统中使用split('\n')将导致不希望的行为。此外,处理具有与其他源(例如来自套接字)可能不同的换行符的字符串也不罕见。

inputString.splitlines()

将为您提供一个包含每个项的列表,^{}方法旨在将每一行拆分为一个列表元素。

相关问题 更多 >