簡體   English   中英

從具有正確編碼(UTF-8)的字符串生成列表

[英]Generate list from string with proper encoding (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 字符串作為一個項目?

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

當您打印 Python 列表(或任何其他標准 Python 容器)時,內容以特殊表示形式顯示,以便於調試; 顯示的每個值都是對該值調用repr()函數的結果。 對於字符串值,這意味着結果是一個unicode 字符串表示,這與直接打印字符串時看到的不同。

Unicode 和字節字符串,當這樣顯示時,將顯示為字符串文字; 您可以將引用的值直接復制並粘貼回 Python 代碼,而不必擔心編碼; 任何不是可打印 ASCII 字符的內容都以引號形式顯示。 超出 latin-1 平面的 Unicode 代碼點顯示為'\\u....'轉義序列。 latin-1 范圍內的字符使用'\\x..轉義序列。 許多控制字符以 1 個字母的轉義形式顯示,例如\\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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM