0

我很难尝试使用正确的 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 字符串作为一个项目?

4

1 回答 1

3

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

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

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

python 交互式提示做同样的事情;当你在提示上回显一个值而不使用print时,'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

是完全正常的行为。换句话说,您的代码可以正常工作,没有任何问题。

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

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'])
于 2013-05-25T07:33:52.787 回答