Файл JSON не читает панд - PullRequest
0 голосов
/ 27 октября 2018

У меня есть файл JSON с музыкальными акустическими характеристиками (его размер составляет около 1 ГБ).Я пытаюсь прочитать его в своем блокноте для панд, используя dataf = "/home/work/my.json" d = json.load(open(dataf, 'r')). Он продолжает выдавать ошибку: 1002 *

Дополнительные данные: строка 2, столбец 1 (символ 499)

Я понимаю, что 499-й символ - это начало следующего трека, но я посмотрел в Интернете и не уверен, как его прочитать. Ниже приведен пример данных.

{"_ id": {" $ подъязычная ":" 5b2cff21aecd2a723459cd65 "}," идентификатор ": 1," SP_ID ":" 0XLOf9LhyazPX9Ld8jPiUq», "танцевальности треков": 0,7079999999999999627, "энергия": 0,60999999999999998668, "ключ": "2", "громкость": -4,5220000000000002416, "режим": "1", "speechiness": +0,057399999999999999634, "acousticness": 0,020400000000000001465, "instrumentalness": 4.4499999999999997457e-06, "живучести": 0,064100000000000004197, "валентность": 0,30499999999999999334, "темп": +123,0379999999999967, "time_signature": "4", "track_uri": "Spotify: дорожка: 0XLOf9LhyazPX9Ld8jPiUq"} { "_id": { "$ OID": "5b2cff21aecd2a723459cd66"}, "идентификатор": 2, "SP_ID": "7aF09WaavZAmAWuUeYxlYD"«танцевальности треков»: 0,59299999999999997158, «энергия»: +0,86799999999999999378, "ключ": "1", "громкость": - +3,5729999999999999538, "режим": "0", "speechiness": +0,29499999999999998446, "acousticness": +0,182999999999999996, "instrumentalness": 0.0, "живучести": +0,36499999999999999112,»валентность ": +0,49599999999999999645," темп ": 104,98799999999999955," time_signature ":" 4" , "track_uri": "Spotify: трек: 7aF09WaavZAmAWuUeYxlYD"} { "_id": { "$ подъязычная": "5b2cff21aecd2a723459cd67"}, "идентификатор": 3, "SP_ID": "0tKcYR2II1VCQWT79i5NrW", "танцевальности треков": +0,5999999999999999778, "энергия": +0,81000000000000005329, "ключ": "0", "громкость": - 4,748999999999999666, "режим": "1", "speechiness":+0,047899999999999998135, "acousticness": +0,0068300000000000001335, "instrumentalness": +0,20999999999999999223, "живучести": +0,15499999999999999889, "валентность": 0,29799999999999998712, "темп": 167,87999999999999545, "time_signature": "4", "track_uri": "Spotify: дорожка: 0tKcYR2II1VCQWT79i5NrW"} {" _id ": {" $ подъязычная ":" 5b2cff21aecd2a723459cd68 "}," идентификатор ": 4," SP_ID ":" 6TWSVHx6z6E42JiwloGv1k " "танцевальности треков": 0,50300000000000000266, "энергия": 0,91800000000000003819, "ключ":" 11», "громкость": -+5,0099999999999997868, "Режим": "1", "speechiness": +0,046399999999999996803, "acousticness": 0,016199999999999999123, "instrumentalness": 0,024400000000000001549, "живучести": 0,18599999999999999867, "валентность": 0,41799999999999998268, "Темп": 140,0, "time_signature":"4", "track_uri": "spotify: track: 6TWSVHx6z6E42JiwloGv1k"} {"_id": {"$ oid": "5b2cff21aecd2a723459cd69"}, "id": 5, "sp_id": "5QqyRUZIxs0" пригодность для танцевальной записи 0E0040,76000000000000000888, "энергия": +0,56100000000000005418, "ключ": "1", "громкость": - 8.6969999999999991758, "режим": "1", "speechiness": 0.13400000000000000799 "acousticness": 0.018499999999999999084 "instrumentalness": 1.9400000000000000604e-05, "liveness": 0.19900000000000001021, "valence": 0.12099999999999999645, "tempo": 134.98300000000000409, "time_signature": "4", "track_uri": "spotify: track: 5QqyRUZeBE04yJxsD1 101 * *II" 1010II "

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Похоже, вы читаете записи из базы данных MongoDB.В результате получается массив JSON-объектов, хранящийся построчно, что означает, что он сам по себе не является допустимым объектом JSON, как указывает @ Andras

. Кажется, было бы намного эффективнее читатьвместо этого данные из MongoDB.

Вы можете использовать PyMongo для этого следующим образом:

import pandas as pd
from pymongo import MongoClient

mdbClient = MongoClient('mongodb://localhost:27017/')
db = mdbClient['db']
collection = db['col']

results = collection.find({})
df = pd.DataFrame.from_records(results)
0 голосов
/ 27 октября 2018

Ваш JSON не будет проанализирован, потому что это недопустимый JSON.Символ, на который жалуется синтаксический анализатор, находится сразу после первого символа новой строки.Ясно, что в файл выводятся построчно объекты, которые вместе не содержат корректный объект.См .:

>>> json.loads(s[:499])
{'_id': {'$oid': '5b2cff21aecd2a723459cd65'},
 'id': 1,
 'sp_id': '0XLOf9LhyazPX9Ld8jPiUq',
 'danceability': 0.708,
 'energy': 0.61,
 'key': '2',
 'loudness': -4.522,
 'mode': '1',
 'speechiness': 0.0574,
 'acousticness': 0.0204,
 'instrumentalness': 4.45e-06,
 'liveness': 0.0641,
 'valence': 0.305,
 'tempo': 123.038,
 'time_signature': '4',
 'track_uri': 'spotify:track:0XLOf9LhyazPX9Ld8jPiUq'}
>>> json.loads(s[499:973])
{'_id': {'$oid': '5b2cff21aecd2a723459cd66'},
 'id': 2,
 'sp_id': '7aF09WaavZAmAWuUeYxlYD',
 'danceability': 0.593,
 'energy': 0.868,
 'key': '1',
 'loudness': -3.573,
 'mode': '0',
 'speechiness': 0.295,
 'acousticness': 0.183,
 'instrumentalness': 0.0,
 'liveness': 0.365,
 'valence': 0.496,
 'tempo': 104.988,
 'time_signature': '4',
 'track_uri': 'spotify:track:7aF09WaavZAmAWuUeYxlYD'}

(s - ваш пример ввода, загруженный в строку.) Эти объекты печатаются один за другим в файл.Вы должны либо изменить синтаксис, чтобы он стал списком объектов (добавить квадратные скобки и запятые), либо анализировать файл построчно, вызывая json.loads в каждой строке ввода.

Теперь,не цитируйте меня по этому вопросу, но взломать ваш ввод, чтобы он стал действительным, JSON довольно просто:

>>> len(json.loads('[' + s.replace('\n', ',') + ']'))
5

В случае, если файл огромен, вы, вероятно, не захотите делать вышеописанный взлом и последующееразбор за один присест, из-за огромных накладных расходов памятиВ этом случае я предлагаю проанализировать ваш файловый объект за объектом.Предполагая, что ваш файл содержит один объект в каждой строке, вам нужно только

dat = [json.loads(line) for line in open(infile)]

, где infile - это путь к вашему сцепленному файлу JSON.Для огромного файла потребуется много времени, и результат займет много памяти, но я бы ожидал, что дополнительные затраты , используемые для синтаксического анализа, будут меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...