大量数据的python编码

时间:2015-08-18 13:39:07

标签: python encoding utf-8 ascii

我有大量的jsondata,我需要转移到excel(10,000左右的行和20列)我使用csv.my代码:

x = json.load(urllib2.urlopen('#####'))
f = csv.writer(codecs.open("fsbmigrate3.csv", "wb+", encoding='utf-8'))
y = #my headers
f.writerow(y)
for row in x:
    f.writerow(row.values())

unicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\ xd6'进行编码:序号不在范围内(128) 是什么出现了。

我试过编码json数据 dict((k.encode('utf-8'), v.encode('utf-8')) for (k,v) in x) 但是要处理的数据太多了。

关于如何解决这个问题的任何想法,(对于我的第一篇文章缺乏SO约定道歉

完整的追溯是; Traceback (most recent call last): File "C:\Users\bryand\Desktop\bbsports_stuff\gba2.py", line 22, in <module> f.writerow(row.values()) UnicodeEncodeError: 'ascii' codec can't encode character u'\xd6' in position 0: ordinal not in range(128) [Finished in 6.2s]

1 个答案:

答案 0 :(得分:0)

由于您没有在此指定Python 3解决方案。 Python 2解决方案更加痛苦。我已经包含了一些非ASCII字符的短样本数据:

#!python3
import json
import csv

json_data = '[{"a": "\\u9a6c\\u514b", "c": "somethingelse", "b": "something"}, {"a": "one", "c": "three", "b": "two"}]'
data = json.loads(json_data)

with open('fsbmigrate3.csv','w',encoding='utf-8-sig',newline='') as f:
    w = csv.DictWriter(f,fieldnames=sorted(data[0].keys()))
    w.writeheader()
    w.writerows(data)

utf-8-sig编解码器确保在输出文件的开头写入字节顺序标记字符(BOM),因为Excel将采用本地ANSI编码。

由于您拥有包含键/值对的json数据,因此使用DictWriter可以指定标题;否则,标题顺序是不可预测的。