【问题标题】:Reading Freebase data dump in python, read to few lines?在 python 中读取 Freebase 数据转储,读取几行?
【发布时间】:2012-06-04 19:19:51
【问题描述】:

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

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

【问题讨论】:

  • wc -l yourfile 说什么?

标签: python file readline freebase


【解决方案1】:

我遇到了一个问题:

open('file', 'rb')

应该解决它。

chr(26)

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

【讨论】:

  • open('file', 'rb') 而不是 open('file') 有效! codecs.open('file',"r","utf-8") 也有效,但它产生的行数比原来多,因为其中的一些 Unicode 字符表示新行,这在 tsv 文件中很糟糕。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多