我的算法首先读取了大量的文本样本。接下来,我需要将它们分成几行:
texts = file_content.split("\n")
但是,该文件太大,以至于该过程立即进入SWAP。 我想预测一下,我实际需要多少内存。 这可能吗?
答案 0 :(得分:1)
在继续之前,以字节为单位确定文件的大小可能会有所帮助。这可能会让您粗略估计您需要的内存量。
要获取文件的大小,您可以使用getsize(path
中的os.path
方法。
import os
size_in_bytes = os.path.getsize('file.txt')
但是,您可能需要两倍的文件大小内存 - 您将文件存储在内存中,以及从文件中读取的字符串。
正如Kasra指出的那样,你最好通过迭代器(只是open()
方法)逐行读取文件,并逐行执行处理,减少额外的需求存储器中。
例如:
with open('file.txt') as f:
line = f.readline()
process(line)
答案 1 :(得分:0)
1事情只是为了优化您的代码,但您询问了内存使用情况。你可以在这里看到一篇好文章http://fa.bianp.net/blog/2013/different-ways-to-get-memory-consumption-or-lessons-learned-from-memory_profiler/。使用库psutil,您只需使用这些代码行来获取内存使用情况
import os
import psutil
process = psutil.Process(os.getpid())
print process.memory_info().rss
答案 2 :(得分:0)
无法预测算法应该使用的内存量。但是不是一次读取整个文本并将其作为更加pythonic的方式加载到内存中,而是可以使用open()
来返回一个像对象一样的迭代器的文件对象,并且不会浪费你的记忆。您只需循环遍历文件对象即可访问这些行。