Помогите решить задачку, есть файл json, нужно вытащить оттуда все строки со словом "noclub" + верхнюю строчку тоже.
Пример:
{
"player": 1737372,
"club": 622
},
{
"player": 16384,
"club": 946
},
{
"player": 13643,
"club": 5100088
},
{
"player": 29217875,
"club": "noclub"
},
{
"player": 398227,
"club": 1581
},
{
"player": 12038706,
"club": 907
},
{
"player": 51070655,
"club": "noclub"
В новый файл json вывести:
{
"player": 29217875,
"club": "noclub"
},
{
"player": 51070655,
"club": "noclub"
Умельцы подскажите ?
Python
Python: как в файле json найти строки по заданному тексту и скопировать рядом стоящую строку
Для решения задачи можно использовать модуль json и функциональное программирование с помощью генераторов списка.
- Открываем файл json и загружаем его содержимое в переменную data с помощью метода load модуля json.
- Создаем генератор списка, который фильтрует элементы списка data и оставляет только те, у которых значение ключа club равно "noclub". Для этого используем функцию filter вместе с лямбда-функцией.
- Для каждого элемента, оставшегося после фильтрации, создаем новый словарь, содержащий ключи "player" и "club", и значения из соответствующих ключей исходного словаря. Для этого используем функцию map вместе с лямбда-функцией.
- Записываем полученные словари в новый файл json с помощью метода dump модуля json.
import json
# Открываем файл json и загружаем его содержимое в переменную data
with open('file.json') as f:
data = json.load(f)
# Создаем генератор списка, который фильтрует элементы списка data и оставляет только те, у которых значение ключа club равно "noclub"
filtered_data = filter(lambda x: x['club'] == 'noclub', data)
# Для каждого элемента, оставшегося после фильтрации, создаем новый словарь, содержащий ключи "player" и "club", и значения из соответствующих ключей исходного словаря
result = map(lambda x: {'player': x['player'], 'club': x['club']}, filtered_data)
# Записываем полученные словари в новый файл json
with open('new_file.json', 'w') as f:
json.dump(list(result), f)
Этот код использует минимальную память и максимально быстрый способ обработки данных. Он фильтрует исходный список и создает новый список только с нужными элементами, а затем преобразует каждый элемент в новый словарь.
Сергей
Спасибо большое, сработало чётко
import json
# Открываем исходный файл JSON для чтения
with open('исходный.json', 'r') as json_file:
data = json.load(json_file)
# Создаем новый список для хранения найденных данн��х
new_data = []
# Проходимся по элементам исходного JSON
for i, item in enumerate(data):
# Если текущий элемент содержит "noclub", добавляем предыдущий элемент и текущий элемент в новый список
if "noclub" in str(item.get("club")):
if i > 0:
new_data.append(data[i - 1])
new_data.append(item)
# Создаем новый файл JSON с найденными данными
with open('новый.json', 'w') as new_json_file:
json.dump(new_data, new_json_file, indent=4)
print("Готово! Найденные данные сохранены в новом файле новый.json")
Павел Шувалов
..а потом выяснится, что файл с json-данными надо рассматривать не как json, а как просто набор текстовых строк.
Сергей
Да, почему то помимо noclub много лишнего скопировалось
Похожие вопросы
- Python, пользователь вводит три числа. Найдите среднее арифметическое этих чисел.
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Шифрование строки. Python
- Помогите со строками в python
- 4 задачи по темам:Массивы,Строки,Циклы,условный оператор
- Python Создать программу, позволяющую распечатать текст из текстового файла.
- Вычислить сумму бесконечного ряда с заданной точностью a.(python)
- Массив состоит из нескольких строк и нужно из каждой строки вывести наибольшее число
- Как сделать из python файла exe файл без потери скорости
- Помогите чайнику в Питоне. Как правильно перейти на другую строку в коде, чтоб он не запустился раньше времени?