如何有效地逐行处理python中的字符串?

时间:2012-03-30 08:57:07

标签: python jython multiline multilinestring

我通过HTTP收到了一些多行数据并将其放在一个字符串中。我只需要过滤包含特定关键字的行并将其写入文件。

如何在不消耗过多内存的情况下处理这些单独的行?即不将输入字符串拆分为换行符然后处理列表?

欢迎特定于Jython的解决方案。

4 个答案:

答案 0 :(得分:1)

由于没有str.split的迭代器版本,您最好的选择是使用re模块来模拟它:

for line in re.finditer('.*?\n', data):
   # do stuff

但请注意,与常规split方法不同,这会留下尾随换行符。

答案 1 :(得分:0)

您可以尝试使用已编译的正则表达式python re

答案 2 :(得分:0)

使用StringIO模块将字符串作为类文件对象进行访问。然后,您可以像对文件一样迭代线。

答案 3 :(得分:0)

我现在实际测试了在Jython中使用data.split('\ n'),re.finditer('。*?\ n',data)和StringIO.readline()的内存要求。我很惊讶地发现split()没有增加使用的内存(PS Old Gen),StringIO排在第二位并且排在第三位。

Jython 2.5.1+:
  split()  +0 x data
  StringIO +2 x data
  re       +4 x data

Jython 2.2.1:
  split()  +0 x data
  re       +2 x data
  StringIO +7 x data

StringIO在.write()调用之后没有使用额外的内存,即它似乎在Jython中由相同的字符串支持。

我没有测试速度。