Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python: как в файле json найти строки по заданному тексту и скопировать рядом стоящую строку

Alexander Ali Ученик (89), закрыт 1 год назад
Помогите решить задачку, есть файл 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"

Умельцы подскажите ?
Лучший ответ
Татьяна Просветленный (36535) 1 год назад
Для решения задачи можно использовать модуль json и функциональное программирование с помощью генераторов списка.
  1. Открываем файл json и загружаем его содержимое в переменную data с помощью метода load модуля json.
  2. Создаем генератор списка, который фильтрует элементы списка data и оставляет только те, у которых значение ключа club равно "noclub". Для этого используем функцию filter вместе с лямбда-функцией.
  3. Для каждого элемента, оставшегося после фильтрации, создаем новый словарь, содержащий ключи "player" и "club", и значения из соответствующих ключей исходного словаря. Для этого используем функцию map вместе с лямбда-функцией.
  4. Записываем полученные словари в новый файл json с помощью метода dump модуля json.
Вот код на Python:
 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)
Этот код использует минимальную память и максимально быстрый способ обработки данных. Он фильтрует исходный список и создает новый список только с нужными элементами, а затем преобразует каждый элемент в новый словарь.
Alexander AliУченик (89) 1 год назад
Спасибо большое, сработало чётко
Остальные ответы
Илон Макс Профи (749) 1 год назад
 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")
ewe 2e¶ CoЛнЫшКоcBeTиТоЧеНЬяРкО*Высший разум (365190) 1 год назад
..а потом выяснится, что файл с json-данными надо рассматривать не как json, а как просто набор текстовых строк.
Илон Макс Профи (749) ewe 2e¶ CoЛнЫшКоcBeTиТоЧеНЬяРкО*, ?
Alexander AliУченик (89) 1 год назад
Да, почему то помимо noclub много лишнего скопировалось
Похожие вопросы