【问题标题】:UnicodeEncodeError when writing to CSV from JSON从 JSON 写入 CSV 时出现 UnicodeEncodeError
【发布时间】:2014-03-05 06:54:19
【问题描述】:

尝试使用 JSON 写入 CSV 时出现以下错误:

Traceback (most recent call last):
File "twitter_search_csv.py", line 25, in <module>
status['retweet_count'],
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 139: ordinal not in range(128)

这是我正在使用的代码:

import requests
import urllib2
from requests_oauthlib import OAuth1
import csv

auth = OAuth1('', '', '', '')
url = 'https://api.twitter.com/1.1/search/tweets.json?q=%23OpeningCeremony'

response = requests.get(url, auth=auth)

data = response.json()['statuses']

with open('olympic_search.csv', 'wb') as csvfile:
    f = csv.writer(csvfile)
    for status in data:
        f.writerow([
            status['id'],
            status['text'],
            status['created_at'],
            status['coordinates'],
            status['user']['id_str'],
            status['retweet_count'],
        ])

【问题讨论】:

标签: python json csv encoding


【解决方案1】:

显式编码字段。否则 Python 会尝试使用 ascii 编码对其进行编码。

>>> print u'\u2026'.encode('ascii')

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    print u'\u2026'.encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 0: ordinal not in range(128)
>>> print u'\u2026'.encode('utf-8')
…

f.writerow([
    status['id'],
    status['text'].encode('utf-8'), # <----
    status['created_at'],
    status['coordinates'],
    status['user']['id_str'],
    status['retweet_count'],
])

【讨论】:

  • 只有现在,我得到一个 AttributeError: Traceback (most recent call last): File "twitter_search_csv.py", line 22, in &lt;module&gt; status['retweet_count'].encode('utf-8'), AttributeError: 'int' object has no attribute 'encode'
  • @Robᵩ,你的答案看起来比我的好。你为什么删除它?
  • 谢谢!这样可行。你怎么知道“文本”需要编码?
  • @PatrickBeeson,我检查了一些示例 tweets.json。其他字段出现非 ascii 字符的可能性似乎较低。
猜你喜欢
  • 2014-09-26
  • 2016-12-21
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多