在 Python 中包含外部文件
Posted
技术标签:
【中文标题】在 Python 中包含外部文件【英文标题】:Including external files in Python 【发布时间】:2012-05-04 17:28:42 【问题描述】:我正在编写一个运行一些模拟的 Python 脚本,但它需要很多输入参数(大约 20 个)。所以我正在考虑将所有模拟参数包含在一个外部文件中。最简单的方法是什么?
我在 Stack Overflow 问题中找到了一个答案How to import a module given the full path?,将所有模拟参数放在一个文件 parm.py 中并使用 imp 包导入该模块。
这将允许运行此脚本的用户提供任何文件作为输入。如果我以这种方式导入模块:
parm = imp.load_source('parm', '/path/to/parm.py')
那么所有参数都必须引用为
parm.p1, parm.p2
但是,我只想在我的脚本中将它们称为 p1、p2 等。有没有办法做到这一点?
【问题讨论】:
您正在寻找类似“import *”的东西 - 不建议这样做。请参阅***.com/questions/2360724/… 中的答案。 解决方法:不要。无论如何,您一般都不应该进行from ... import *
导入,因为这会使跟踪代码变得更加困难。
我希望用户提供模拟参数列表,对于他不提供的任何参数,将使用默认值。所以我正在考虑运行我的代码,它为参数分配所有默认值,然后执行一个 execfile('parm.py') 它将覆盖用户提供的所有变量。有没有更优雅的方法来做到这一点?
【参考方案1】:
从外部文件导入任意代码是个坏主意。
请将您的参数放入配置文件中,并使用 Python 的 ConfigParser
模块读取。
例如:
==> multipliers.ini <==
[parameters]
p1=3
p2=4
==> multipliers.py <==
#!/usr/bin/env python
import ConfigParser
config = ConfigParser.SafeConfigParser()
config.read('multipliers.ini')
p1 = config.getint('parameters', 'p1')
p2 = config.getint('parameters', 'p2')
print p1 * p2
【讨论】:
【参考方案2】:您可以为此使用execfile()
,但您应该完全考虑另一种方式。
【讨论】:
有什么简单的方法吗?有一段时间我想在命令行上将它们作为参数传递,但它们太多了。以上是关于在 Python 中包含外部文件的主要内容,如果未能解决你的问题,请参考以下文章