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

标签 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 中的对象。如果不编写一些东西来遍历对象,我想不出一种简单的方法来做到这一点。

最佳答案

有两种方式来看待这个问题。

How can I read key-value pairs in python? Is there a standard way to do this?

How can I give full expressive power to a configuration script?

如果你的问题是第一个;那么最明显的答案是使用 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,而是你应该使用 execfile:

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

依次从 python 脚本中读取;它将读取全局变量 myvar,无论脚本如何派生它:

import random
myvar = random.choice("special_value", "another_value")

关于python:从文件输入python数据的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557607/

相关文章:

windows - Windows 中 Kubernetes .yaml 中 PersistentVolume 的路径

java - 能否说服 JPA 在例如 UUID 和字符串之间进行转换?

python - 保存一个 numpy 矩阵

python - Boost.Python : __init__ accepting None argument

python - matplotlib 中的 LaTeX 标签不一致

c++ - 无法链接到库...VS 2010 lib

python - 两个迭代器的并集

java - 在java中从jar导入文件时出错

intellij-idea - 如何导出intellij项目

hibernate - glassfish 4 上的 jdbc/_default