读大文本文件和内存

Arn*_*ung 2 python

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

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

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

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

for line in open(filename, 'r'):
    try:
        list.append(json.loads(line))
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ver 7

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

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

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

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

至:

for line_str in open("myfile"):
    line_obj = json.loads(line_str)
    if "ERROR" in line_obj:
        print line_obj
Run Code Online (Sandbox Code Playgroud)