python:从文件中输入python数据的简单方法

时间:2011-09-26 15:39:51

标签: python import persistence

在shell脚本中,可能会执行以下操作:

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 个答案:

答案 0 :(得分:4)

有两种方法可以看待这个问题。

  

如何在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样式配置的文件中读取值:

# You can use comments
[mysection]
myvar = special_value

对于第二个选项,当你真的想要为配置提供完全的python功能时(这种情况很少见,但有时是必要的),你可能不想使用import,而应该使用{ {1}}:

execfile

反过来会从python脚本中读取;无论脚本如何派生它,它都会读取全局变量config = {} execfile("my_config", config) myvar = config.get("myvar", "default_value")

myvar