2015-08-10 5 views
0

Моя цель: Цель, которую я создаю, состоит в том, чтобы пользователь вводил имя элемента. Затем python считывает во внешний файл, который находит значение, которому назначен запрашиваемый элемент, и, наконец, значение распечатывается.Импорт текстовых файлов с переменными в python

Например -

>>> helium 
2 

Проблема заключается в том, я не знаю, как получить питона interpretate в текстовый файл, который выглядит, как этот

hydrogen = 1 
helium = 2 
lithium = 3 

как код. Поэтому, когда я ввожу печать (литий), я получаю сообщение об ошибке.

Моя просьба: Может ли кто-нибудь показать мне, как я могу довести это до такой степени, что могу прочесть ценности и распечатать их. Мне не нужна помощь с пользовательским вводом и все такое.

Заранее спасибо.


UPDATE

Я использовал этот код:

import json 
file = open("noble_gases.json","r") 
elements = json.loads(file.read()) 

noble_gases.json выглядит следующим образом:

"helium" : 2, 
"neon" : 10, 
"argon" : 18, 
"krypton" : 36, 
"xenon" : 54, 
"radon" : 86, 

И теперь я получаю эту ошибку:

Traceback (most recent call last): 
    File "C:\Python34\Programs\Python Mini Project\finder.py", line 3, in <module> 
    elements = json.loads(file.read()) 
    File "C:\Python34\lib\json\__init__.py", line 318, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python34\lib\json\decoder.py", line 346, in decode 
    raise ValueError(errmsg("Extra data", s, end, len(s))) 
ValueError: Extra data: line 1 column 10 - line 7 column 1 (char 9 - 85) 

Спасибо всем, кто был контрабандным. Меня поражает скорость ответов.


UPDATE:

Удаление окончательного запятые в файле JSon сделал трюк. Спасибо всем, кто помог. Я не могу отказаться от оценок, так как я не уровень 15. Итак, я дал вам благодарственное сообщение.

проект был завершен

+0

Если вы хотите достичь именно то, что вы просили (хотя все это выглядит немного странно для меня, и я бы предложите использовать некоторые из приведенных ниже ответов), вы можете назвать свой файл 'elements.py' и сделать' из импорта элементов * ' – LondonRob

+0

В ответ на ваше обновление: вам нужно включить открывающие и закрывающие фигурные скобки в файле JSON. Попробуйте сделать первую строку '{« гелий »: 2,' и последнюю строку «Радон»: 86,} '. – Cyphase

ответ

1

Вы можете разбора текстовый файл (как было предложено другими), если if вы спросите меня, что это будет немного ненужной сложностью, или вы можете использовать более удобный для программирования формат данных. Я предлагаю использовать json или yaml в зависимости от того, что вам подходит.

Если вы используете JSON, чем вы можете сделать следующее: -

# rename gas.txt to gas.json 
{ 
    'hydrogen': 1, 
    'helium': 2, 
    'lithium': 3 
} 

# in your code 
import json 
file = open('gas.json') 
elements = json.loads(file.read()) 
print(elements['helium']) 
+0

Отличная идея указать :). Однако нет необходимости в нескольких слоях dicts; просто один плоский dict, и назначьте это переменной 'elements' (или что-то еще). – Cyphase

+0

@Cyphase Спасибо, я внес изменения, которые вы рекомендовали – hspandher

0

Это может помочь

from collections import defaultdict 
FILE = open("gas.txt","r") 
GAS = defaultdict(str) 
for line in FILE: 
    gasdata = line.strip().split('=') 
    GAS[gasdata[0].strip()] = gasdata[1].strip() 

print GAS['carbon dioxide'] # 4 

gas.txt является:

hydrogen = 1 
helium = 2 
lithium = 3 
carbon dioxide = 4 
+0

Дайте мне знать, если это работает или нет. –

0

Это должно делать то, что вам нужно:

gas = {} 
with open('gas.txt', 'r') as gasfile: 
    for line in gasfile: 
     name, value = line.replace(' ', '').strip('=') 
     gas[name] = value 


# The gas dictionary now contains the appropriate key/value pairs 

print(gas['helium']) 
Смежные вопросы