txt файл в словарь Python
В текстовом файле лежат такие строки, это часть
soler(count,min,avg,max): 0
grep_req_das: 10
grep_req_says: 12
ПРЕК.req: 20
ПРЕК RI.req: 12
laik(min):
tase.dip: 1002
Я преобразовываю в словарь так:
file = open("test.txt")
onstring = file.read().split("\n")[:-1]
dict = dict()
for item in onstring:
key = item.split(":")[0]
value = item.split(": ")[1:]
dict[key] = value
file.close()
Но на выходе значения все в квадратных скобках и кавычках:
{'soler(count,min,avg,max)': [], 'grep_req_das': ['10'], 'grep_req_says': ['12'], 'ПРЕК.req': ['20'] ...
Подскажите, что я не так делаю, как сделать, что было так:
{'soler(count,min,avg,max)': 0, 'grep_req_das': 10, 'grep_req_says': 12, 'ПРЕК.req': 20 ...
Ответы (2 шт):
Автор решения: cauf
→ Ссылка
# открываем файл, обязательно указывая режим и кодировку
with open(r'path\to\file.txt', mode='r', encoding='utf-8') as fl:
# считываем содержимое файлам одним списком стром
onstring = fl.readlines()
# определяем выводной словарь. Ключевое слово dict занято классом словаря,
# поэтому его использовать в качестве идентификатора переменной не рекомендуется.
# Так же не рекомендуется напрямую инициализировать его экземпляры. Для этого
# есть соответствующий синтаксический литерал
res = {}
# проходим в цикле по списку строк
for i in onstring:
# присваиваем переменным k и v левую и правую часть подстроки,
# разделяя по символу ':'
k, v = i.split(':')
# убираем лишние концевые пробелы
v = v.strip()
# определяем, является ли значение переменной v числом, и если да, то
# преобразуем к целому числу, иначе оставляем строкой
v = int(v) if v.isdigit() else v
# добавляем в словарь соответствующие пары ключ:значение
res[k] = v
print(res)
Автор решения: Namerek
→ Ссылка
Мои 5 копеек (с учетом исходника приведённого Вами в предыдущем вопросе и Вашего коментария на ответ @cauf):
import re
with open("test.txt", "r", encoding="utf-8") as a_string:
lines = re.findall(r'^.+?\d+', a_string.read(), flags=re.M)
output_dict = {k: int(v) for k, v in [re.split(r'\s*:\s*', line) for line in lines]}
print(output_dict)
# {'grep_req_das': 10, 'grep_req_says': 12, 'ПРЕК.req': 20, 'ПРЕК RI.req': 12}