У меня есть файлы ~ 100k JSON, каждый из которых содержит JSON, который я прокручиваю, чтобы создать модель слов с мешками - очень просто. Каждый файл JSON выглядит следующим образом:Извлечение частей JSON из списка json.loads в python
[{"tokens":[{"word":"Voices","lemma":"voice","pos":"NNS","ner":"O"},{"word":"from","lemma":"from","pos":"IN","ner":"O"},{"word":"Russia","lemma":"Russia","pos":"NNP","ner":"LOCATION"}],"dependencies":[{"head":0,"dep":2,"label":"prep_from"}]},{"tokens":[{"word":"Wednesday","lemma":"Wednesday","pos":"NNP","ner":"DATE"},{"word":",","lemma":",","pos":",","ner":"DATE"},{"word":"11","lemma":"11","pos":"CD","ner":"DATE"},
....
Что мне нужно, чтобы извлечь только значения "word"
ключей для каждого файла и сохранить этот массив в новом файле, так что каждый файл имеет массив как:
["Voices", "from", "Wednesday","Russia", "," ,"11"...]
А также у меня есть массив для похож всех файлов вместе взятых, хранящегося в ../../data/train_jsons/all_words.json
Однако json.loads
создает список для каждого элемента не Dict. Как я могу достичь того, что хочу, просто перейдя по списку для каждого файла и сохраняя эти отдельные массивы слов в новых файлах, которые поддерживают имя пути к файлу json, например. новые файлы под названием ../../data/train_jsons/words_for_.........json
?
Попытка преобразовать в Словаре и с помощью кнопки «слово», кажется, не работает на:
for subdir, dirs, files in os.walk('../../data/train_jsons'):
for file in files:
filepath = subdir + os.sep + file
if filepath.endswith(".json"):
with open(filepath) as data_file:
data = json.load(data_file)
dict = dict(itertools.izip_longest(*[iter(data)] * 2, fillvalue=""))
Скорость является ключевым фактором в моем решении.
Спасибо! Это сработало, я просто конвертировал в 'для x в данных: для u в x ['tokens']: print u ['word']' –
Решение очень медленное, к сожалению, хотя у меня есть около 100 000 json-файлов, таких как вышесказанное. Есть ли решение, которое может быть быстрее? –
Печать выполняется медленно, вы можете предварительно выделить, указав большой список, заполняющий цикл. Затем вы можете многопоточно и рассматривать PyPy. – marmouset