我通过HTTP收到了一些多行数据并将其放在一个字符串中。我只需要过滤包含特定关键字的行并将其写入文件。
如何在不消耗过多内存的情况下处理这些单独的行?即不将输入字符串拆分为换行符然后处理列表?
欢迎特定于Jython的解决方案。
答案 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中由相同的字符串支持。
我没有测试速度。