Python: простой способ ввода данных Python из файла - PullRequest
1 голос
/ 26 сентября 2011

В сценарии оболочки можно сделать что-то вроде:

myvar='default_value'
source myfile.sh
echo $myvar

, где myfile.sh что-то вроде:

echo "myvar='special_value'" > myfile.sh

Я знаю несколько «безопасных» способов сделать это вPython, но я могу думать только о том, чтобы получить подобное поведение в Python (пусть и некрасивое и небезопасное):

myvar = 'default_value'
myimport = 'from %s import *' % 'myfile'
exec(myimport)
print(myvar)

где myfile.py находится в ./ и выглядит так:

myvar = 'special_value'

Думаю, я был бы счастлив сделать что-то вроде:

m.myvar = 'default_value'
m.update(__import__(myimport))

и обновить объекты в m.Я не могу придумать простой способ сделать это, не написав что-то, чтобы зацикливаться на объектах.

1 Ответ

4 голосов
/ 26 сентября 2011

Есть два способа взглянуть на этот вопрос.

Как я могу прочитать пары ключ-значение в python?Есть ли стандартный способ сделать это?

и

Как дать полную выразительную силу сценарию конфигурации?

Еслитвой вопрос первый;тогда самый очевидный ответ - использовать модуль ConfigParser:

from ConfigParser import RawConfigParser
parser = RawConfigParser({"myvar": "default_value"}) # Never use ConfigParser.ConfigParser!
parser.read("my_config")
myvar = parser.get("mysection", "myvar")

, который будет считывать значение из файла, который выглядит как обычная конфигурация в стиле INI:второй вариант, когда вы действительно хотите дать полную мощность python для конфигурации (что редко, но иногда необходимо), вы, вероятно, не хотите использовать import, вместо этого вы должны использовать execfile:

config = {}
execfile("my_config", config)
myvar = config.get("myvar", "default_value")

Который, в свою очередь, будет читать из скрипта Python;она будет читать глобальную переменную myvar независимо от того, как скрипт ее выводит:

import random
myvar = random.choice("special_value", "another_value")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...