在python中读取Freebase数据转储,读取几行?

时间:2012-06-04 19:19:51

标签: python file readline freebase

我正在尝试使用freebase数据转储,但是我发现使用python读取文件时遇到了一些问题。看起来我的程序无法阅读所有内容。

def test2():
    count=0
    for line in open(FREEBASE_TOPIC):
        count+=1
    return count

def test3():
    count=0
    for line in open(FREEBASE_QUAD):
        count+=1
    return count


if __name__ == "__main__":

   print "FREEBASE TOPIC - NR LINES:",test2()
   print "FREEBASE QUAD - NR LINES:",test3()

结果如下:

FREEBASE TOPIC - ITR TIME: 1.21000003815
FREEBASE TOPIC - NR LINES: 1643010

FREEBASE QUAD - ITER TIME: 0.797000169754
FREEBASE QUAD - NR LINES: 3155131

这可以是全部。它看起来很少包含整个freebase。我无法看到如何在2秒内迭代一个33GB文件和另一个5GB文件。

有什么问题?我正在下载文件,以防下载过程中出现问题,但我的连接需要几十年的时间,所以我在平均时间问。文件大小是正确的,我打印了一些行,看起来是正确的。

3 个答案:

答案 0 :(得分:2)

我遇到了一个问题:

open('file', 'rb')

应该解决它。

chr(26)

有时会导致文件模式“r”的文件结尾为默认值。

答案 1 :(得分:2)

听起来您在使用它们之前解压缩文件。在访问文件时,你几乎肯定最好保持文件压缩和解压缩。

from bz2 import BZ2File
for line in BZ2File('freebase-datadump-quadruples-<date>.tsv.bz2','rU'):
    <process a line>

答案 2 :(得分:0)

您的脚本运行正常,并在Ubuntu上为我生成正确的行数。这可能是您操作系统的限制吗?

Parsing large (20GB) text file with python - reading in 2 lines as 1