导入vs打开输入文件

时间:2013-05-14 21:18:19

标签: python file input

我有一个输入文件,其中包含我想在python程序中使用的变量。使用import引入变量是否更好:

import imp
inputData = imp.load_source(...)

或者使用以下方式阅读文件更好:

for line in open('inputfile'):

这两种方式都有优点或缺点吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

每个人都有各自的优点和缺点。逐行方法绝对“安全”,因为您不是简单地执行在源文件中找到的任何代码。但是,由于您似乎并不太关心恶意用户,我认为这不是您环境中的问题。逐行方法的明显缺点是,在编写它时,它更适合您。 imp.load_source显然更容易编码。

我认为执行此操作的“正确”方法是使用内置函数execfile,因为这种情况基本上是此函数存在的确切原因。这样,您可以为整个执行提供自己的命名空间。它的功能与imp.load_source类似,不同之处在于它不会创建模块。你会做这样的事情:

loaded_variables = {}
execfile('foo.bar', loaded_variables)

值得注意的是,如果你不能信任你的用户,你不应该允许执行任意代码!即使这很痛苦,也可以做一行 - 如果您不相信该文件不包含恶意代码,请按行解析或使用输入/配置文件的其他格式。

答案 1 :(得分:0)

如果您希望Python执行文件中的语句,最好导入而不是以字符串形式读取文件(这是open(...)将导致的文件)。

如果您要导入该文件,您可以将其放在PYTHONPATH中列出的目录中,只需使用

import config

另一方面,如果您不控制文件的内容并且内容由潜在的恶意用户提供,则必须首先解析内容而不盲目地执行其内容。

这不是一个有利有弊的选择。如果您关心安全性,那么您不得导入该文件。

答案 2 :(得分:0)

当您import文件时代码已执行。你应该永远允许执行任意代码。在安全方面打开如此巨大的漏洞之前要仔细考虑。

有很多文件格式可以轻松解析,也可以使用,或者甚至可以创建自己的格式。特别是如果赋值只包含文字,而不包含任意表达式。