阅读用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编辑器检查你的文件。