读取6.9GB文件会导致分段错误

Fre*_*nan 2 python

我正在尝试打开最新的日语维基百科数据库,以便在Linux上阅读Python 3.3.1,但是Segmentation fault (core dumped)这个短程序出错:

with open("jawiki-latest-pages-articles.xml") as f:
    text = f.read()
Run Code Online (Sandbox Code Playgroud)

文件本身很大:

-rw-r--r-- 1 fredrick users 7368183805 May 17 20:19 jawiki-latest-pages-articles.xml
Run Code Online (Sandbox Code Playgroud)

所以看起来我可以存储的字符串有多长的上限.解决这种情况的最佳方法是什么?

我的最终目标是计算文件中最常见的字符,有点像Jack Halpern的"报纸中最常用的汉字"的现代版本.:)

Ada*_*eld 11

不要一次阅读整篇文章.即使您的Python发行版编译为64位程序(在32位程序中根本不可能分配超过4 GB的虚拟内存),即使您有足够的RAM来存储它,它仍然是一个坏的想法立即将它全部读入内存.

一个简单的选择是一次读一行并处理每一行:

with open("jawiki-latest-pages-articles.xml") as f:
    for line in f:
        # Process one line
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用固定大小的块处理它:

while True:
    data = f.read(65536)  # Or any other reasonable-sized chunk
    if not data:
        break
    # Process one chunk of data.  Make sure to handle data which overlaps
    # between chunks properly, and make sure to handle EOF properly
Run Code Online (Sandbox Code Playgroud)