如何使用Python保存带葡萄牙语重音字符的推文至CSV格式并解决乱码问题
解决葡萄牙语推文保存CSV时的重音字符乱码问题
嘿,你的问题根源在于手动对文本进行了encode('utf-8')编码,这完全是多余的操作,反而导致了乱码!
问题分析
你已经在打开文件时指定了encoding="utf-8",此时csv.writer会自动把Unicode字符串编码成UTF-8字节写入文件。但你在写入tweet.full_text和tweet.user.screen_name时,手动调用了.encode('utf-8'),把字符串转成了字节对象。当csv.writer处理字节对象时,会将其转换成它的字符串表示形式(比如b'prêmios'会被写成pr\xc3\xaamios这种转义格式),这就是你看到的乱码。
修改后的代码
只需要去掉那两处.encode('utf-8')即可:
import json import re import csv import tweepy import pandas as pd #encoding: utf-8 def save_tweets( hashtag_phrase, api: tweepy.API): #get the name of the spreadsheet we will write to fname = '_'.join(re.findall(r"#(\w+)", hashtag_phrase)) #open the spreadsheet we will write to with open('%s.csv' % (fname), 'w', encoding="utf-8") as file: w = csv.writer(file) #write header row to spreadsheet w.writerow(['timestamp', 'tweet_text', 'username', 'all_hashtags', 'followers_count']) #for each tweet matching our hashtags, write relevant info to the spreadsheet for tweet in tweepy.Cursor(api.search_tweets, q=hashtag_phrase+' -filter:retweets', tweet_mode='extended', result_type='mixed', lang='pt').items(50): # 去掉.encode('utf-8'),直接使用字符串 w.writerow([ tweet.created_at, tweet.full_text.replace('\n',' '), tweet.user.screen_name, [e['text'] for e in tweet._json['entities']['hashtags']], tweet.user.followers_count ])
额外优化建议(可选)
如果你希望all_hashtags列在CSV里显示为逗号分隔的文本而不是列表格式,可以把列表转成字符串:
','.join([e['text'] for e in tweet._json['entities']['hashtags']])
这样处理后,打开CSV文件时就能正常显示葡萄牙语的重音字符啦!
内容的提问来源于stack exchange,提问作者Palmiere
相关产品推荐
相关产品推荐

