4

我正在尝试使用 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

这可以是全部。包含整个游离碱似乎只有几行。而且我看不出如何在 2 秒内迭代一个 33GB 文件和另一个 5GB 文件。

怎么了?我正在再次下载文件,以防下载过程中出现问题,但我的连接需要数十年的时间,所以我在此同时询问。文件大小是正确的,我已经打印了一些行,它们看起来是正确的。

4

3 回答 3

2

我遇到了一个问题:

open('file', 'rb')

应该解决它。

chr(26)

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

于 2012-06-04T20:03:44.417 回答
2

听起来您在使用它们之前正在解压缩文件。几乎可以肯定,最好保持文件压缩并在访问时对其进行解压缩。

from bz2 import BZ2File
for line in BZ2File('freebase-datadump-quadruples-<date>.tsv.bz2','rU'):
    <process a line>
于 2012-06-08T18:27:05.127 回答
0

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

使用 python 解析大型(20GB)文本文件 - 将 2 行读取为 1

于 2012-06-04T20:37:58.230 回答