Python не читает выбранную строку из текстового файла, как в формате словаря - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть текстовый файл ввода с различными входными данными, как показано ниже, в формате словаря и списка соответственно.Ниже приведена часть текстового файла:

#Drive-Size-Mapping
{'root' : 50 , '\usr' : 20, 'swap' : 1}
#OS-Version
[7.1, 7.2, 7.3, 7.4, 7.5, 7.6]

Как видно, первая строка в формате словаря, а вторая строка в формате списка.Теперь, когда я читаю и сохраняю строки в переменных, Python не может распознать формат.Это мой код, который я пытаюсь:

 f=open("C:\\Users\xyz\\Desktop\\Inputs.txt")
lines=f.readlines()
i = lines.index("#Drive-Size-Mapping\n")
di=dict()
di = lines[i+1]
print(di[0])
j = lines.index("#OS-Version\n")
list = lines[j+1]
print(list[0])

Код, приведенный выше:

{{

, т.е. просто печатает элемент, который присутствует виндекс первого массива массива.Что я хочу, чтобы python интерпретировал эти переменные как словарь и список соответственно.Итак, если я сделаю print di["root"]

Мой код должен распознать его как словарь и вывести как 50print(list[0]) должен распознавать его как список и выводить 7.1.

Пожалуйста, дайте мне знать, как следует манипулировать строками файлов, чтобы заставить Python интерпретировать их в том формате, в котором они на самом деле присутствуют?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

Просто добавив к вышеприведенным ответам:

Использование:

 ast.literal_eval()

Но удалите / замените "\" из ключей словаря, так как это может создать ошибку unicode в literal_eval ()function

Еще одна ошибка в коде, после преобразования в словарь вы не можете сделать d [0], так как словари не проиндексированы

1 голос
/ 16 апреля 2019

Строки, которые вы получаете из файла, string.Если вы хотите преобразовать их в dict или list объекты, вы можете использовать literal_eval:

from ast import literal_eval

...
d = literal_eval(lines[i+1])
...
l = literal_eval(lines[i+1])

. Если вы можете изменить формат входного файла, я хотел бы изменить его наjson файл для удобного хранения и загрузки ваших объектов с помощью json-модуля .

1 голос
/ 16 апреля 2019

Функция readlines делает то, что говорит: она читает строки . Вы и я можем признать, что две строки - это диктон Python и список Python, но Python не может и не должен.

Мне кажется, что вы читаете настройки конфигурации из файла с исходным кодом Python. Более стандартный способ сделать это - использовать файл .ini. Посмотрите на модуль configparser.

...