阅读用 python 提取的推文

read tweets extracted with python

我正在尝试阅读 excel 中的推文。已使用 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())

(见于此post:)

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

例如这条推文: 在 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 编写器希望所有输入都是 Unicode 字符串。您正在获取字节字符串的 __repr__()。

通过将第一行替换为:

来设置输出文件的编码
writer= csv.writer(open(r"C:\path\twitter_"+date+".csv", "w", encoding="UTF-8"), lineterminator='\n', delimiter =';')

这意味着写入文件的任何 Unicode 字符串都将自动翻译。然后删除显式 encode():

tweet_text=tweet.text

编辑:

如果不使用导入功能,

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 编辑器中检查您的文件。