2017-02-26 144 views
1

有bz2文件壓縮的​​文本塊。 文本文件中的數據如下所示。Python3:如何讀取txt.bz2文件

1 x3, x32, f5 

    0 f4, g6, h7, j9 

    ............. 

我知道如何通過下面的代碼

rf = open('small.txt', 'r') 
    lines = rf.readlines() 
    lst_text = [] 
    lst_label = [] 
    for line in lines: 
     line = line.rstrip('\n') 
     label, text = line.split('\t') 
     text_words = text.split(',') 
     lst_text.append(text_words) 
     lst_label.append(int(label)) 

加載文本文件,但TXT被壓縮到small.txt.bz2文件之後。 我想使用以下數據來讀取bz2文件,但出現錯誤。

import bz2 

bz_file = bz2.BZ2File("small.txt.bz2") 
lines = bz_file.readlines() 
for line in lines: 
    line = line.rstrip('\n') 
    label, text = line.split('\t') 
    text_words = text.split(',') 
    print(label) 

錯誤:

 line = line.rstrip('\n') 
TypeError: a bytes-like object is required, not 'str' 

你能給我提示如何對付它,代碼是最好的。謝謝!

回答

2

你得到這個錯誤是因爲BZ2file對象以二進制模式打開文件。所以你的line字節對象,而不是一個字符串。你可以通過使用line = line.rstrip(b'\n')來解決這個問題。但結果行仍然是一個字節對象。

但你或許應該在文本模式下改用bz2.open

with bz2.open("small.txt.bz2", "rt") as bz_file: 
    for line in bz_file: 
     label, text = line.rstrip('\n').split('\t') 
     text_words = text.split(',') 
     print(label) 
+0

感謝@Roland史密斯,你是獨一無二的傢伙,我接受了。 – tktktk0711