用Python读取一个巨大的文件:为什么我会遇到分段错误?

时间:2015-09-13 18:53:41

标签: python memory segmentation-fault

我知道我不应该立即将整个文件读入内存,但我没有这样做。

我想也许我在循环中做了一些记忆沉重的事情,然后摆脱了一切,直到我离开了这个:

with open("huge1.txt", "r") as f:
    for line in f:
        pass

它给了我一个分段错误。

如果我把一切都搞定了,那么迭代这样的文件是懒惰的,不应该一次加载多行到内存中。

我也尝试使用islice,但效果相同。

我的文件是基于行的,行都很短,文件大小约为6 GB。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

无论如何都不应发生分段错误,因为python解释器应该捕获错误并在语言中引发异常。所以你的python解释器肯定有bug。

现在,至于什么可以触发这个bug。您逐行读取文件,一旦读取下一行就丢弃每一行(实际上一次保留2行,因为在完成下一行的分配之前不能丢弃上一行)。

因此,如果内存不足(这可能是导致分段错误的原因,例如malloc()返回NULL并且调用者未能检查返回值),可能是因为有些线路仍然太大。

如果您运行GNU / something系统,则可以运行wc -L huge1.txt来检查最长行的长度。

如果你确实有一个很长的行,要么它是文件的问题而你可以修复它,或者你需要使用{{1来逐行读取文件而不是逐行读取文件}}

如果您想帮助python开发人员,您也可以提交错误报告。翻译不应该是段落错误。