2012-06-04 70 views
4

我想使用freebase數據轉儲,但它接縫,我用python讀取文件時有一些問題。它看起來像我的程序不能讀取所有的行。在python中讀取Freebase數據轉儲,讀到幾行?

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文件。

出了什麼問題?我再次下載文件,以防下載過程中出現問題,但這需要幾十年的時間才能完成,所以我在此期間提出了一些問題。文件大小是正確的,我已經打印了一些行,他們看起來是正確的。

+1

wc -l yourfile''說什麼?打開('文件','rb')而不是打開('文件')工作的 – jterrace

回答

2

沒有發生到我一個問題:

open('file', 'rb') 

應該解決這個問題。

chr(26) 

有時會導致文件以默認文本模式'r'結尾。

+0

! codecs.open('file',「r」,「utf-8」)也可以工作,但是它會產生比這更多的行,因爲它的一些Unicode字符表示新行,這在tsv文件中是不好的。 – kimg85

2

這聽起來像你正在使用前解壓縮的文件。當你訪問文件時,你幾乎可以更好地保持文件壓縮和解壓縮。

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