2016-11-15 4 views
0

Как описано в этой статье, How to Import Data in .bson File, у меня есть .bson-файл, который я хотел бы как-то загрузить в Stata.Преобразование bson в json (затем в csv или загрузить json в Stata)

Лучшим сценарием будет создание CSV-файла, но преобразование его в файл .json также будет отличным. Тогда я думаю, что могу использовать insheetjson в Stata.

Я знаком с python и нашел этот пост, MongoDB: BSON to JSON. Ответ говорит, что можно использовать simplejson пакет и этот код для преобразования BSON в JSON:

result = db.mycol.find({ ....}) 
json = simplejson.dumps(result) 

Как я могу получить эту работу? Я точно не знаю, как загрузить файл bson в python (который, я думаю, является объектом db). Я также не знаю, что следует делать в круглых скобках ({ ....}). Какие-либо предложения? Опять же, приветствуется еще один простой способ получения данных .bson в .csv или .json.

*** Обновление

Принимая комментарий в посоветовавшись, я сделал следующее:

with open("filepath/games.bson", "r") as myfile: 
    data = myfile.read() 

#note that we need to change to unicode because of errors with some characters 
data2 = unicode(data, errors='ignore') 

with open('filepath/games.json', 'w') as data_file: 
    json.dump(data2, data_file) 

Но в обоих data и data2, я получаю результат, который выглядит как:

\x00\x02fg_pct\x00\x05\x00\x00\x00.273\x00\x10fga\x00\x0b\x00\x00\x00\x10ft\x00\x01\x00\x00\x00\x02ft_pct\x00\x05\x00\x00\x00.500\x00\x10fta\x00\x02\x00\x00\x00\x02mp\x00\x06\x00\x00\x0021:00\x00\x10orb\x00\x01\x00\x00\x00\x10pf\x00\x02\x00\x00\x00\x02player\x00\x0b\x00\x00\x00Juan Dixon\x00\x10plus_minus\x00\xee\xff\xff\xff\x10pts\x00\x08\x00\x00\x00\x10stl\x00\x01\x00\x00\x00\x10tov\x00\x01\x00\x00\x00\x10trb\x00\x02\x00\x00\x00\x00\x037\x00\xf7\x00\x00\x00\x10ast\x00\x02\x00\x00\x00\x10blk\x00\x00\x00\x00\x00\x10drb\x00\x02\x00\x00\x00\x10fg\x00\x00\x00\x00\x00\x10fg3\x00\x00\x00\x00\x00\x02fg3_pct\x00\x05\x00\x00\x00.000\x00\x10fg3a\x00\x03\x00\x00\x00\x02fg_pct\x00\x05\x00\x00\x00.000\x00\x10fga\x00\x05\x00\x00\x00\x10ft\x00\x02\x00\x00\x00\x02ft_pct\x00\x05\x00\x00\x00.500\x00\x10fta\x00\x04\x00\x00\x00\x02mp\x00\x06\x00\x00\x0020:00\x00\x10orb\x00\x00\x00\x00\x00\x10pf\x00\x02\x00\x00\x00\x02player 

Это не похоже на то, что я хочу. Если да, я не уверен, как открыть его в Stata или другой программе.

+0

В вашем примере, я уверен, что 'result' будет чисто Python ДИКТ/список. Если это так, вы можете просто использовать стандартную 'json' lib Python для выполнения json.dumps (result)', чтобы иметь допустимую строку JSON или 'json.dump (result)', чтобы сохранить JSON в файл. Я что-то неправильно понял? – lucasnadalutti

+0

Я попытался сделать это и обновил вопрос с результатами. – bill999

+0

Попробуйте заменить 'open (" filepath/games.bson "," r ") как myfile:' with 'with open (" filepath/games.bson "," rb ") в качестве myfile:' – lucasnadalutti

ответ

0

Попробуйте это:

import bson 
with open('filepath/games.bson','rb') as f: 
    data = bson.decode_all(f.read()) 
+1

Я не знаю почему, но я получаю эту ошибку: «Объект AttributeError: 'module' не имеет атрибута 'decode_all'" – bill999

+0

Какую версию python вы используете? Вы не забыли импортировать модуль bson? –

+0

Версия 2.7.10. Я импортировал модуль bson, да. – bill999