我有大量的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]
答案 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
可以指定标题;否则,标题顺序是不可预测的。