读大文本文件和内存

时间:2015-03-02 18:37:50

标签: python

我将阅读大约7 GB的文本文件。

每当我尝试阅读此文件时,都需要很长时间。

例如,假设我有350 MB的文本文件,笔记本电脑大约需要一分钟或更短时间。如果我想读7GB,理想情况下应该花20分钟或更短时间。不是吗?我的花费比我预期的要长得多,我想缩短阅读和处理数据的时间。

我使用以下代码进行阅读:

for line in open(filename, 'r'):
    try:
        list.append(json.loads(line))
    except:
        pass

在读取文件后,我过去通过制作另一个列表并删除前一个列表来过滤掉列表中不必要的数据。 如果您有任何建议,请告诉我。

1 个答案:

答案 0 :(得分:7)

7GB文件可能比20 x 350mb文件花费的时间要长得多,因为你没有足够的内存来保存内存中的所有数据。这意味着,在某些时候,您的操作系统将启动swapping out一些数据 - 将其从内存写入磁盘 - 以便可以重复使用内存。

这很慢,因为您的硬盘显着比RAM慢,而在7GB时,会有大量数据从硬盘读取,放入RAM,然后移回到您的页面file(操作系统用于存储已从RAM中复制的数据的磁盘上的文件)。

我的建议是重新编写程序,这样它一次只需要将一小部分文件存储在内存中。根据您的问题,您可以通过将一些逻辑移动到读取文件的循环中来实现此目的。例如,如果您的程序试图查找并打印包含" ERROR"的所有行,您可以从以下位置重新编写它:

lines = []
for line in open("myfile"):
    lines.append(json.loads(line))
for line in lines:
    if "ERROR" in line:
        print line

要:

for line_str in open("myfile"):
    line_obj = json.loads(line_str)
    if "ERROR" in line_obj:
        print line_obj