[英]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.