2015-08-18 3 views
0

У меня есть огромное количество jsondata, что мне нужно передать, чтобы преуспеть (10000 или так строк и столбцов 20ish) Im использованием кода 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 не может кодировать символ u '\ xd6' в позиции 0: порядковый номер не в диапазоне (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]

+0

Я должен добавить, что код работает и создает файл и записывает данные до момента, когда появляется неузнаваемый символ. –

+0

Пожалуйста, покажите нам * полный * traceback. – Kevin

+0

Возможный дубликат [UnicodeEncodeError: кодек ascii не может кодировать символ u '\ xa0' в позиции 20: порядковый номер не в диапазоне (128)] (http://stackoverflow.com/questions/9942594/unicodeencodeerror-ascii- codec-cant-encode-character-u-xa0-in-position-20) –

ответ

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, можно указать заголовки; в противном случае порядок заголовка не предсказуем.

Смежные вопросы