为什么输出列表在我的Python 2.7代码中是空的

时间:2016-09-14 05:03:02

标签: python python-2.7 unicode

使用Python 2.7并尝试对UTF-8编码文件进行简单的标记化。 a的输出似乎是一个字节字符串,这是预期的,因为在tk[0].encode('utf-8')之后,它会从Python unicode类型转换为str/byte。我的主要困惑是为什么b的输出是空列表?我认为没有编码(我的意思是没有调用.encode('utf-8')),它应该是原始的unicode字符(例如,我希望打印一些中文字符,因为1.txt是UTF-8编码的中文字符文件)。

源代码

import jieba

if __name__ == "__main__":

    with open('1.txt', 'r') as content_file:
        content = content_file.read()

    segment_list = jieba.tokenize(content.decode('utf-8'), mode='search')
    if segment_list is None:
        print 'segment is None'
    else:
        a = [tk[0].encode('utf-8') for tk in segment_list]
        b = [tk[0] for tk in segment_list]

        print a
        print b

**输出**,

['\xe4\xb8\x8a\xe6\xb5\xb7', '\xe6\xb5\xb7\xe5\xb8\x82', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82', '\xe6\xb7\xb1\xe5\x9c\xb3', '\xe6\xb7\xb1\xe5\x9c\xb3\xe5\xb8\x82', '\xe7\xa6\x8f\xe7\x94\xb0', '\xe7\xa6\x8f\xe7\x94\xb0\xe5\x8c\xba', '\xe6\xa2\x85\xe6\x9e\x97', '\xe6\x9e\x97\xe8\xb7\xaf', '\xe6\xa2\x85\xe6\x9e\x97\xe8\xb7\xaf', '\xe4\xb8\x8a\xe6\xb5\xb7', '\xe6\xb5\xb7\xe5\xb8\x82', '\xe6\xb5\xa6\xe4\xb8\x9c', '\xe6\x96\xb0\xe5\x8c\xba', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82\xe6\xb5\xa6\xe4\xb8\x9c\xe6\x96\xb0\xe5\x8c\xba', '\xe8\x80\x80\xe5\x8d\x8e', '\xe8\xb7\xaf', '\r\n']
[]

1 个答案:

答案 0 :(得分:1)

似乎jieba.tokenize()返回一个生成器。生成器只能迭代一次。做得更好

    b = [tk[0] for tk in segment_list]
    a = [tk.encode('utf-8') for tk in b]