2

有由 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'

你能给我提示如何处理它,代码是最好的。谢谢!

4

1 回答 1

5

您收到此错误是因为对象以二进制模式BZ2file打开文件。所以你是一个字节对象,而不是一个字符串。您可能可以通过使用来解决这个问题。但是结果行仍然是一个字节对象。lineline = 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)
于 2017-02-26T10:57:40.693 回答