阅读用python提取的推文

我正在尝试阅读excel中的推文。 Tweets已经被python (和tweepy )检索,然后保存在一个csv文件中:

 # -*- coding: utf-8 -*- writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w"), lineterminator='\n', delimiter =';') writer.writerow(["username", "nb_followers", "tweet_text"]) auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token_key, access_token_secret) api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True) for tweet in tweepy.Cursor(api.search, q="dengue+OR+%23dengue", lang="en", since=date, until=end_date).items(): username=tweet.user.screen_name nb_followers=tweet.user.followers_count tweet_text=tweet.text.encode('utf-8') writer.writerow([username, nb_followers, tweet_text]) 

由于utf-8编码,我有问题在文本编辑器或Excel中阅读。 比如这个推文:

在这里输入图像说明

在Excel中给出这个:

 b"\xe2\x80\x9c@ThislsWow: I want to do this \xf0\x9f\x98\x8d http://t.co/rGfv9e70Tj\xe2\x80\x9d pu\xc3\xb1eta you're going to get bitten by the mosquito and get dengue" 

如何获得原始字符? 如何在开始时删除b,仅在python程序中有用?


编辑:

根据Alastair McCormack的评论:我删除了我的字段的编码,并将其添加到作者:

 writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="UTF-8"), lineterminator='\n', delimiter =';') tweet_text=tweet.text.replace("\n", "").replace("\r", "") 

现在我有以下错误:

 tweet: Traceback (most recent call last): File "twitter_influence.py", line 88, in <module> print("tweet:", tweet_text) File "C:\Users\rlalande\Envs\tweepy\lib\encodings\cp437.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u2026' in position 137: character maps to <undefined> 

编辑2:

我现在使用以下内容:

 import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 

(在这篇文章中看到: https : //stackoverflow.com/a/4374457/1875861 )

没有更多的错误,但它不输出正确的字符。

比如这个推文: 在这里输入图像说明 在excel中给出这个输出:

 Malay Mail Online Alarming rise in dengue casesMalay Mail Online“The ministry started a campaign for construction… http://t.co/MuLFlMwkY0 

以前,用这个字段的直接编码,我有:

 b'Malay Mail Online\n\nAlarming rise in dengue casesMalay Mail Online\xe2\x80\x9cThe ministry started a campaign for construction\xe2\x80\xa6 http://t.co/MuLFlMwkY0' 

结果是不同的,但不是更好…为什么报价字符输出不正确? 在一种情况下,它会输出……而在另一种情况下则会输出\ xe2 \ x80 \ xa6。

这是因为CSV编写器希望所有input都是Unicodestring。 你得到一个字节string的__repr __()。

通过replace第一行来设置输出文件的编码:

 writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="UTF-8"), lineterminator='\n', delimiter =';') 

这意味着写入文件的任何Unicodestring都将被自动翻译。 然后删除显式的encode()

 tweet_text=tweet.text 

编辑:

如果您不使用导入function,则Excel需要强制读取UTF-8文件。 最简单的方法是将UTF-8 BOM签名添加到文件的开头。

如果使用utf_8_sig编码,Python将提供一个快捷方式。 例如

 writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="utf_8_sig"), lineterminator='\n', delimiter =';') 

你也可以用像Notepad ++或Atom这样的像样的UTF-8编辑器检查你的文件。