1

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

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

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

4

4 回答 4

1

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

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

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

于 2012-03-30T09:25:00.397 回答
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

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

我没有测试速度。

于 2012-04-03T08:27:21.433 回答
0

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

于 2012-03-30T09:18:04.693 回答
0

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

于 2012-03-30T09:52:35.173 回答