【发布时间】:2014-05-07 07:56:16
【问题描述】:
我需要找到包含特定字符串的文本文件的所有行,并将每一行写入不同的文本文件。如何改进我的代码以防止系统在读取大文本文件(6GB 大小)的前 5,000,000,000 行时崩溃?编译代码后,我的电脑运行缓慢,突然死机。即使我停止编译过程,内存仍然被占用并且出现同样的问题。我的 IDE 是 Spyder,我使用 Python 2.7。 谢谢!
我的代码是:
import fileinput
ot = 'N'
j = 1
i = 1
string = "ABCD"
for line in fileinput.input(['/../myfile.txt']):
if i<=5000000000:
if string in line:
output = open(ot + str(j) + '.txt', 'w')
output.write(line)
output.close()
j += 1
i += 1
【问题讨论】:
-
尝试使用
context manager:with line in open('file.txt', 'r'): -
如果你尝试读取一个 50MB 的文件,结果如何?
-
@Chien-Wei Huang,代码在 i = 1,000,000 和较小的文本文件(例如 250MB)的情况下最大工作量,但对于超过这些文件,我的系统显示内存不足(我的操作系统是 UBUNTU 13.10 和我的电脑内存为 8GB)。
-
如果去掉
output = open(ot + str(j) + '.txt', 'w')到output.close()这三行,会发生什么? -
我用 2GB 文件测试,没有在 Mac 环境中写入文件,这行得通。不知道问题是与一个目录中的文件数限制有关,也可能与操作系统环境有关。我的程序内存只需要 1X MB。
标签: python performance for-loop bigdata