【问题标题】:How to read a long multiline string line by line in python如何在python中逐行读取长的多行字符串
【发布时间】:2013-03-03 13:29:02
【问题描述】:

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

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

textData 变量确实存在,我在下去之前打印它,但我认为预编译器正在引发错误。

【问题讨论】:

  • 您需要将行拆分为单独的字符串。有一个“/n”并不能使它成为一个单独的字符串。
  • 您遇到了什么错误(带有回溯)? textData 的值是多少?您能给我们一个SSCCE,我们可以运行它并看到与您相同的问题,以便我们向您解释吗?
  • 另外,您认为“引发错误”的“预编译器”是什么?

标签: python


【解决方案1】:

通过换行符分割。

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

如果你迭代一个字符串,你是在那个字符串中逐个字符地迭代,而不是逐行。

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

a
b
c

【讨论】:

  • 对于现在阅读本文的任何人,请改用 str.splitlines() 函数。此解决方案会出现一些边缘情况。例如。假设您遍历每一行,如果在对象的最后一行末尾有一个 \n ,那么您的 for 循环将尝试在空行上执行任务,从而导致错误。上面在接受的解决方案中讨论过。
【解决方案2】:

使用.splitlines()怎么样?

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

【讨论】:

  • @BenjaminGruenbaum:"/r""/n" 只是普通的由斜线和字母组成的两个字符的字符串。你的意思是"\n"
  • 是副本还是迭代器?
  • @user3226167 它返回一个列表
  • 是否有迭代器版本的分割线不会创建列表,而是在迭代器中返回?
  • 有StringIO,不过是底层接口。也就是说,在这种情况下,您已经有一个字符串 - 如果您想逐行迭代迭代器(例如文件),那是另一个问题。请记住 - 在这种情况下,您已经有一个字符串。
【解决方案3】:

这个答案在几个极端情况下都失败了(参见 cmets)。上面接受的解决方案将处理这些问题。 str.splitlines() 是要走的路。尽管如此,我还是会留下这个答案作为参考。

旧的(不正确的)答案:

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

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

【讨论】:

  • split('\n') 将保留字符串中的任何 \r 字符。回车不会被删除,这可能是个问题。
  • 非常好的观点。我认为这个答案是不正确的,因为splitlines() 会捕捉到一些边缘情况,但我的解决方案没有。 docs.python.org/3/library/stdtypes.html#str.splitlines
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多