2017-02-26 20 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を使用する必要があります。@Rolandスミスは、あなたは親切な男です

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

おかげで、私はそれを受け入れます。 – tktktk0711

関連する問題