我有一些简单的代码来接收一些JSON Twitter数据,并将一些特定的字段输出到CSV文件的单独列中。我的问题是,在我的有生之年,我无法找到将输出编码为UTF-8的正确方法。下面是我在这里的一个成员的帮助下所能得到的最接近的消息,但是我仍然没有正确运行,并且由于tweet文本字段中的独特字符而失败。
import json
import sys
import csv
import codecs
def main():
writer = csv.writer(codecs.getwriter("utf-8")(sys.stdout), delimiter="\t")
for line in sys.stdin:
line = line.strip()
data = []
try:
data.append(json.loads(line))
except ValueError as detail:
continue
for tweet in data:
## deletes any rate limited data
if tweet.has_key('limit'):
pass
else:
writer.writerow([
tweet['id_str'],
tweet['user']['screen_name'],
tweet['text']
])
if __name__ == '__main__':
main()
我也有同样的问题。我有大量来自twitter firehouse的数据,所以每一个可能的复杂情况(和已经出现的情况)!
我用try/except解决了如下问题:
如果dict值是一个字符串:
if isinstance(value,basestring)
我尝试直接对其进行编码。如果不是一个字符串,我把它变成一个字符串,然后对它进行编码。如果失败了,那是因为有个小丑在推特上用奇怪的符号来搞乱我的剧本。如果是这样的话,首先我对字符串进行解码,然后重新编码
value.decode('utf-8').encode('utf-8')
,然后对非字符串进行解码,生成字符串并重新编码value.decode('utf-8').encode('utf-8')
试试这个:
希望这对你有帮助。
来自文档: https://docs.python.org/2/howto/unicode.html
如果不起作用:
Python DictWriter writing UTF-8 encoded CSV files
相关问题 更多 >
编程相关推荐