我有一个多行字符串,我想在每一行上做一个操作,如下所示:
inputString = """Line 1
Line 2
Line 3"""
我想迭代每一行:
for line in inputString:
doStuff()
我有一个多行字符串,我想在每一行上做一个操作,如下所示:
inputString = """Line 1
Line 2
Line 3"""
我想迭代每一行:
for line in inputString:
doStuff()
当前回答
我希望注释有适当的代码文本格式,因为我认为@1_CR的答案需要更多的碰撞,我想增加他的答案。无论如何,他引导我使用以下技巧;如果可用,它将使用cStringIO(但是注意:cStringIO和StringIO是不一样的,因为你不能子类化cStringIO…它是内置的…但对于基本操作,语法是相同的,所以你可以这样做):
try:
import cStringIO
StringIO = cStringIO
except ImportError:
import StringIO
for line in StringIO.StringIO(variable_with_multiline_string):
pass
print line.strip()
其他回答
就像其他人说的
inputString.split('\n') # --> ['Line 1', 'Line 2', 'Line 3']
这与上面的相同,但string模块的函数是不赞成的,应该避免使用:
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']
在这种特殊情况下可能有点过分,但另一种选择涉及使用StringIO创建类文件对象
for line in StringIO.StringIO(inputString):
doStuff()
最初的帖子要求代码打印一些行(如果它们在某些条件下为真)加上下面的行。 我的实现是这样的:
text = """1 sfasdf
asdfasdf
2 sfasdf
asdfgadfg
1 asfasdf
sdfasdgf
"""
text = text.splitlines()
rows_to_print = {}
for line in range(len(text)):
if text[line][0] == '1':
rows_to_print = rows_to_print | {line, line + 1}
rows_to_print = sorted(list(rows_to_print))
for i in rows_to_print:
print(text[i])
inputString.splitlines()
splitlines()方法的目的是将每行分割成一个列表元素。
我希望注释有适当的代码文本格式,因为我认为@1_CR的答案需要更多的碰撞,我想增加他的答案。无论如何,他引导我使用以下技巧;如果可用,它将使用cStringIO(但是注意:cStringIO和StringIO是不一样的,因为你不能子类化cStringIO…它是内置的…但对于基本操作,语法是相同的,所以你可以这样做):
try:
import cStringIO
StringIO = cStringIO
except ImportError:
import StringIO
for line in StringIO.StringIO(variable_with_multiline_string):
pass
print line.strip()