#python #json #dataframe
#питон #json #фрейм данных
Вопрос:
Привет, у меня есть файл json, который содержит что-то, как показано ниже. Я хочу написать код, чтобы просмотреть каждую строку в файле и отфильтровать элементы «emoji»: «1» и вывести результат в другой файл json.
Ввод
{"o": [{"item": {"emoji": "0"}}]} {"p": [{"item": {"emoji": "1"}}]} {"q": [{"item": {"emoji": "1"}}]} {"r": [{"item": {"emoji": "0"}}]}
Выход
{"p": [{"item": {"emoji": "1"}}]} {"q": [{"item": {"emoji": "1"}}]}
Комментарии:
1. Пожалуйста, объясните, как ваш вопрос связан с
dataframe
тегом, который вы использовали2. Что вы пробовали и в чем проблема? поделитесь кодом, пожалуйста.
3. Это не файл json, а файл, содержащий строки json… Прочитайте файл построчно, преобразуйте строку в диктант(скажем
data
) сjson.loads
помощью, а затем изучитеdata.values[0]
или более точноdata.values[0]['item']['emoji']
…4.
grep -hnr -A2 -B2 --no-group-separator "{"emoji": "1"}" /input.json gt; output.json
Ответ №1:
Самый простой способ работы со структурой ваших данных json-это выполнить итерацию по всем строкам файла и проверить, есть ли в строке определенная строка:
filtered_json = [] with open('data.json', 'r') as file: for line in file: if '"emoji": "1"' in line: filtered_json.append(line)
это, конечно, немного неаккуратно, но это будет быстрое решение.
теперь вы можете написать filtered_json
с:
with open('new_data.json', 'w') as file: new_data = 'n'.join(filtered_json) file.write(new_data)
Более сложным способом работы с вашими данными json было бы использование json
пакета:
import json filtered_json = [] with open('data', 'r') as file: for line in file: j = json.loads(line) if int(j[list(j.keys())[0]][0]['item']['emoji']) == 1: filtered_json.append(j)
это довольно плохо, и запись данных в файл также будет странной.
мы можем сделать это намного лучше, изменив ваши данные json в фактический формат json:
старые данные.json:
{"q": [{"item": {"emoji": "1"}}]} {"r": [{"item": {"emoji": "0"}}]}
новые данные.json:
{ "r": {"item": {"emoji": 0}}, "q": {"item": {"emoji": 1}} }
Теперь мы можем использовать этот новый файл data.json более простым способом, работая с json
пакетом:
import json with open('data.json', 'r') as file: j = json.load(file) filtered_json = {} for key in j.keys(): if j[key]['item']['emoji'] == 1: filtered_json[key] = j[key]
Изменив файл json, мы получили гораздо более простой код. Мы даже можем использовать такое понимание диктанта, как это:
with open('data.json', 'r') as file: j = json.load(file) filtered_data = {k: v for k, v in j.items() if v['item']['emoji'] == 1}
что, вероятно, является самым питоническим способом сделать это
Вы можете написать filtered_json
сюда, просто позвонив:
with open('new_data.json', 'w') as file: json.dump(filtered_json, file)