Python readline()和Counter在非常长的行上导致MemoryError

时间:2014-12-18 00:47:43

标签: python memory readline

我遇到了内存错误问题。

pifile = 'pibillion.txt'
with open(pifile, "r+") as a:
    data = str(a.readline())
    c = Counter(data)

我的所有代码都是读取一个非常大的pi数字行。 txt文件只有953 MB。我有8 GB RAM。我猜测错误是它遇到了字符串大小限制,但我不确定。其余代码以2为增量插入换行符。任何帮助将非常感谢如何继续这一点。

我得到的确切错误是:

data = str(a.readline())
   MemoryError

1 个答案:

答案 0 :(得分:2)

Python本身并不是懒惰的(比如haskell),所以读取一个字符串会把它全部放在内存中。添加一些字符串转换,你就会内存不足。相反,迭代地执行此操作,如下所示。

请注意,我使用了一个新文件,因为文件通常是连续存储的,因此插入非常昂贵。

with open('pibillion.txt', 'r') as old_file, open('pibillion_.txt', 'w') as new_file:
    while True:
        c = old_file.read(2)
        if not c:
            break
        new_file.write(c + '\n')