python编码的海量数据

2024-05-07 05:44:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大量的jsondata需要转换成excel(大约10000行和20ish列)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) 但是有太多的数据需要处理。你知道吗

关于如何完成这件事,有什么想法吗?(抱歉,我的第一篇文章缺乏惯例。)

完整的回溯是;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]


Tags: csv数据injson编码formyascii
1条回答
网友
1楼 · 发布于 2024-05-07 05:44:32

因为您没有指定这里有一个python3解决方案。python2解决方案要痛苦得多。我包含了一些带有非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可以指定头;否则,头的顺序是不可预测的。你知道吗

相关问题 更多 >