Как из txt файла выбрать значения между определенными строками в python?
Я только начал изучать программирование (начал изучение с python). Сейчас хочу обработать txt файлы полученные в результате обработки аудиофайлов при помощи VOSK-API, а именно:
У меня есть много txt файлов содержащие примерно такие строки:
"partial" : "текст"
}
{
"partial" : "текст текст"
}
"result" : [{
"conf" : 0.378535,
"end" : 1.140000,
"start" : 0.870000,
"word" : "текст"
}, {
"conf" : 0.988076,
"end" : 1.589016,
"start" : 1.145362,
"word" : "текст текст"
}],
"text" : "текст текст текст"
}
{
"partial" : "текст_2"
}
{
"partial" : "текст_2 текст_2"
}
"result" : [{
"conf" : 0.704822,
"end" : 6.717415,
"start" : 6.240000,
"word" : "текст_2"
}, {
"conf" : 0.991954,
"end" : 6.990000,
"start" : 6.740945,
"word" : "текст_2 текст_2"
}],
"text" : "текст_2 текст_2 текст_2"
И мне необходимо получить из них следующее:
- текст(указываем значение "conf") текст(указываем значение "conf") текст(указываем значение "conf")
- текст_2(указываем значение "conf") текст_2(указываем значение "conf") текст_2(указываем значение "conf")
Большая просьба оказать помощь в решении данной задачи. Своего варианта к сожалению, нет, так как даже не представляю, как это реализовать.
Заранее всем большое спасибо!
Ответы (2 шт):
Данный текстовый файл хранит данные в формате JSON. Для работы с этим форматом в Python есть библиотека json
Подключаем ее и считываем данные в словарь (dict) при помощи json.loads(содержимое текста):
import json
with open('Тектовый файл.txt', 'r', encoding = 'utf-8') as file:
data = json.loads(file.read())
file.close()
Далее можем работать с объектом data как со словарем. Подробнее о словарях.
Например, получить conf можно так:
conf = data['result'][0]['conf']
Регулярным выражением выделяем нужные куски из текста и парсим их при помощи json:
import json, re
def get_data(text_data):
result = []
for m in re.finditer(r'^\s*\{\s*"result".+?^\s*"text"\s*:.*?\}', text_data, flags=re.M+re.S):
j = json.loads(m.group(0))
result.append([(info["word"], info["conf"]) for info in j["result"]])
return result
text = '''
{
"partial" : "текст"
}
{
"partial" : "текст текст"
}
{
"result" : [{
"conf" : 0.378535,
"end" : 1.140000,
"start" : 0.870000,
"word" : "текст"
}, {
"conf" : 0.988076,
"end" : 1.589016,
"start" : 1.145362,
"word" : "текст текст"
}],
"text" : "текст текст текст"
}
{
"partial" : "текст_2"
}
{
"partial" : "текст_2 текст_2"
}
{
"result" : [{
"conf" : 0.704822,
"end" : 6.717415,
"start" : 6.240000,
"word" : "текст_2"
}, {
"conf" : 0.991954,
"end" : 6.990000,
"start" : 6.740945,
"word" : "текст_2 текст_2"
}],
"text" : "текст_2 текст_2 текст_2"
}
'''
data = get_data(text)
print("-", "\n- ".join(map(str, data)))
На выходе:
- [('текст', 0.378535), ('текст текст', 0.988076)]
- [('текст_2', 0.704822), ('текст_2 текст_2', 0.991954)]
- [('добрый', 0.675097), ('день', 0.673823), ('вас', 0.927409), ('приветствовать', 0.735118), ('компании', 0.577527), ('перед', 0.262191), ('вами', 0.2617)]
- [('а', 0.713988), ('скажите', 0.939162), ('как', 0.952058), ('вам', 0.907947), ('могу', 0.874466), ('обращаться', 1.0)]
- [('мой', 1.0), ('господин', 1.0)]
- [('мой', 1.0), ('господин', 1.0), ('хорошо', 0.944449), ('замечательно', 0.977677), ('господина', 0.33661), ('пару', 0.989326), ('минут', 1.0), ('сможете', 0.987912), ('уделить', 0.829497), ('конечно', 0.997882), ('хорошо', 0.948283), ('спасибо', 0.977629), ('большое', 0.590951), ('буквально', 1.0), ('пару', 0.913501), ('вопросов', 0.983437), ('скажите', 0.976819), ('пожалуйста', 1.0), ('ваш', 0.996072), ('телефон', 1.0), ('поддерживает', 0.975375), ('три', 0.633331), ('или', 0.541369), ('четыре', 0.917025), ('же', 0.478112), ('конечно', 1.0), ('замечательно', 1.0)]
- [('вопрос', 0.957119), ('каким', 0.963909), ('провайдером', 0.627245), ('сколько', 1.0), ('примерно', 1.0), ('месяц', 0.566976), ('плащ', 0.475217), ('перед', 1.0), ('каждым', 1.0), ('вопросом', 0.978447), ('необходимо', 1.0), ('говорить', 1.0), ('мой', 1.0), ('господин', 1.0)]
- [('хорошо', 1.0), ('мой', 0.923967), ('господин', 1.0), ('каким', 0.976793), ('провайдерам', 0.567223), ('пользуясь', 0.420532), ('билайн', 0.890181), ('билайн', 0.978282), ('хорошо', 1.0), ('мой', 1.0), ('господин', 1.0), ('извините', 0.836975), ('пожалуйста', 1.0)]
- [('а', 0.583045), ('сколько', 1.0), ('вы', 0.987925), ('платите', 0.997781), ('каждый', 1.0), ('месяц', 1.0)]
- [('где', 0.87797), ('то', 0.87797), ('около', 1.0), ('шести', 0.961093), ('ста', 0.378545), ('рублей', 1.0), ('около', 1.0), ('шести', 0.877064), ('ста', 0.962923), ('рублей', 0.971753), ('отлично', 0.728312), ('именно', 1.0), ('для', 1.0), ('вас', 1.0), ('наша', 1.0), ('компания', 1.0), ('предоставляет', 1.0), ('именно', 0.948491), ('для', 0.871826), ('вас', 0.82166), ('очень', 0.894104), ('мой', 1.0), ('господин', 1.0)]
- [('извините', 1.0), ('я', 1.0), ('перезвоню', 0.99192)]
Зачитывание файлов уж как-нибудь сами...