【问题标题】:Generate list from string with proper encoding (UTF-8)从具有正确编码(UTF-8)的字符串生成列表
【发布时间】:2013-05-20 18:30:48
【问题描述】:

我很难从一个字符串生成一个列表,使用正确的 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 字符串作为一个项目?

【问题讨论】:

    标签: python json list utf-8


    【解决方案1】:

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

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

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

    python 交互式提示符做同样的事情;当您使用print 在提示符without 上回显一个值时,'represented' 中的值,以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'])
    

    【讨论】:

    • 我明白了……所以我看到的并不是我真正得到的。我不得不承认,我认为这与“渲染”有关,而不是与事物的“真实性”有关。非常感谢Martijn!
    猜你喜欢
    • 2012-08-09
    • 2021-09-24
    • 2013-02-17
    • 2013-06-06
    • 2011-02-17
    • 2014-06-09
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多