我有一个大文件(400+ MB),我正在使用get_contents_as_string()
从S3读取,这意味着我最终将整个文件作为字符串存储在内存中。我并行运行其他几个内存密集型操作,因此我需要一种以内存效率的方式将生成的字符串按行号拆分为块。 split()
足够有效吗?或者像re.finditer()
这样的更好的方式?
答案 0 :(得分:1)
我在这里看到三个选项,从最耗费内存到最少:
split
将创建一个文件副本作为字符串列表,这意味着使用了额外的400 MB。易于实施,需要RAM。re
或只是遍历字符串并记住\n
位置:for i, c in enumerate(s): if c == '\n': newlines.append(i+1)
。我还建议将解决方案2或3封装到一个单独的类中,以保持换行索引和字符串内容的一致性。我认为Proxy
模式和lazy evaluation
的概念适合这里。
答案 1 :(得分:0)
您可以尝试逐行读取文件
f= open(filename)
partialstring = f.readline()
见 https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files