阅读用 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 编辑器中检查您的文件。
我正在尝试阅读 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:)
没有更多的错误,但没有输出正确的字符。
例如这条推文:
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 编辑器中检查您的文件。