使用正确的编码从字符串生成列表(UTF-8)

时间:2013-05-25 06:35:38

标签: python json list utf-8

我很难尝试从字符串生成列表,使用正确的UTF-8编码,我正在使用Python(我只是学习编程,所以我的傻问题/可怕的编码)。

源文件是一个推文提要(JSON格式),在成功解析它并从其他所有提取推文消息后,我设法只在打印(作为字符串)之后获得具有正确编码的文本。如果我尝试将其打包成列表表单,则会返回到未编码的u\000000表单。

我的代码是:

import json

with open("file_name.txt") as tweets_file:
    tweets_list = [] 
    for a in tweets_file:
        b = json.loads(a)
        tweets_list.append(b)

    tweet = []
    for i in tweets_list:
        key = "text"
        if key in i:
            t = i["text"]
            tweet.append(t)

    for k in tweet:
        print k.encode("utf-8")

作为替代方案,我尝试在开头(获取文件时)进行编码:

import json
import codecs

tweets_file = codecs.open("file_name.txt", "r", "utf-8")
tweets_list = [] 
for a in tweets_file:
    b = json.loads(a)
    tweets_list.append(b)
tweets_file.close()

tweet = []
for i in tweets_list:
    key = "text"
    if key in i:
        t = i["text"]
        tweet.append(t)

for k in tweet:
    print k

我的问题是:如何将生成的k个字符串放入列表中?每个k字符串作为项目?

1 个答案:

答案 0 :(得分:3)

您对Python字符串表示感到困惑。

当您打印python列表(或任何其他标准Python容器)时,内容以特殊表示形式显示,以使调试更容易;显示的每个值都是在该值上调用repr() function的结果。对于字符串值,这意味着结果是 unicode字符串表示,这与您直接打印字符串时看到的内容不同。

Unicode和字节字符串,如图所示,表示为字符串文字;引用的值,您可以直接复制并粘贴回Python代码,而不必担心编码;任何不是可打印ASCII字符的内容都以引用形式显示。超出latin-1平面的Unicode代码点显示为'\u....'转义序列。 latin-1范围中的字符使用'\x..转义序列。许多控制字符以单字母转义格式显示,例如\n\t

python交互式提示做同样的事情;当您使用print在没有的提示上回显某个值时,“代表”中的值,以repr()形式显示:

>>> print u'\u2036Hello World!\u2033'
‶Hello World!″
>>> u'\u2036Hello World!\u2033'
u'\u2036Hello World!\u2033'
>>> [u'\u2036Hello World!\u2033', u'Another\nstring']
[u'\u2036Hello World!\u2033', u'Another\nstring']
>>> print _[1]
Another
string

正常行为。换句话说,您的代码有效,没有任何内容被破坏。

要回到您的代码,如果您只想从推文JSON结构中提取'text'密钥,在读取文件时进行过滤,请不要打扰循环两次:

import json

with open("file_name.txt") as tweets_file:
    tweets = [] 
    for line in tweets_file:
        data = json.loads(a)
        if 'text' in data:
            tweets.append(data['text'])