如何在python中逐行读取长的多行字符串


84

我有很多行的字符串。如何使用for子句逐行阅读行?这是我正在尝试做的事情,并且在该for line in textData行中引用的textData var上出现错误。

for line in textData
    print line
    lineResult = libLAPFF.parseLine(line)

textData变量确实存在,我在关闭之前就将其打印出来,但是我认为预编译器正在启动该错误。

TIA

丹尼斯


您需要将行拆分为单独的字符串。包含“ / n”并不能使其成为单独的字符串。
2013年

您遇到什么错误(使用追溯)?有什么价值textData?您能给我们一个SSCCE吗,我们可以运行并看到与您相同的问题,以便我们向您解释。
abarnert 2013年

另外,您认为“启动错误”的“预编译器”是什么?
abarnert 2013年

Answers:


141

那使用.splitlines()呢?

for line in textData.splitlines():
    print(line)
    lineResult = libLAPFF.parseLine(line)

@BenjaminGruenbaum:"/r""/n"仅仅由一个斜杠和一个字母的正常两个字符串。你是说"\n"
abarnert 2013年

它是副本还是迭代器?
user3226167

@ user3226167它返回一个列表
本杰明·格伦鲍姆

是否有不创建列表而是返回迭代器的拆分线的迭代器版本?
Youda008 '18 -10-1

有StringIO,但这是一个较低级别的接口。也就是说,在这种情况下,您已经有一个字符串-如果要逐行迭代迭代器(例如文件),这是另一个问题。请记住-在这种情况下,您已经有一个字符串。
本杰明·格林鲍姆

6

通过换行符拆分。

for line in wallop_of_a_string_with_many_lines.split('\n'):
  #do_something..

如果您迭代一个字符串,则是在该字符串中逐个char迭代char,而不是逐行迭代。

>>>string = 'abc'
>>>for line in string:
    print line

a
b
c

对于现在阅读本文的任何人,请改用str.splitlines()函数。这种解决方案会出现一些极端情况。对于前。说您遍历每一行,如果对象最后一行的末尾有一个\ n,则您的for循环将尝试在空行上执行任务,从而导致错误。上面在接受的解决方案中讨论过。
thefrollickingnerd

1

在一些极端情况下,此答案失败(请参阅注释)。上面接受的解决方案将处理这些问题。str.splitlines()是要走的路。尽管如此,我将保留这个答案作为参考。

旧的(不正确的)答案:

s =  \
"""line1
line2
line3
"""

lines = s.split('\n')
print(lines)
for line in lines:
    print(line)

谢谢@PR,您也教了我一些知识。我不知道import re
DKean 2013年

为什么要使用re.split替代str.split(或splitlines)只是对换行字符分割?从单个静态文字字符中构建正则表达式无非是使事情变得更加复杂。
abarnert 2013年

@PR为了适应前面的讨论,我认为您应该写s.split('\ n')。用r'\ n'分割不起作用。
David Epstein

复制并粘贴我的代码对我有用(只是尝试了一下)。但现在看一下(三年后,我本可以使用s.split。现在更改它
PR

1
split('\n')将保留\r字符串中的所有字符。回车不会被删除,这可能是一个问题。
牙签海葵
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.