通过另一个python脚本从python文件中检索变量值的最佳方式



我有很多python文件,它们都有相同的变量名,但值不同。像这样的东西应该在一个:

var_one = 'happy'
var_two = '2345'
var_three = '-24.24'
var_four = 'Chocolate'

我需要编写一个可以读取这些文件的Python脚本,当我请求var_one时,它会返回happy。如果我请求var_two,它将返回2345,依此类推。

现在,我有一个兼容python的工具箱,它使用以下内容来实现这一点:

for fname in myfile:
d = toolbox.datafile(fname)
my_mood = d['var_one']
number  = d['var_two']
decimal = d['var_three']
candy   = d['var_four']

然后打印my_mood将打印出happy

然而,这个工具箱不符合python 3,我也没有制作它,所以我想知道是否有一个简单的内置工具箱可以完成这项任务。

提前感谢

编辑**

导入方法似乎对回答这个问题最有帮助。我现在唯一的问题是我不知道如何导入文件。

为了进一步解释,我将解析命令行参数,其中一个参数将是我们想要导入的所述文件的位置。导入它的语法是什么?

我有一个等于<home/myname/python/myfile.py>args.file

那么我该如何导入args.file呢?

你可以做:

vars.py

var_one = 'happy'
var_two = '2345'
var_three = '-24.24'
var_four = 'Chocolate'

main.py

import vars
# hard coded attribute lookup
print(vars.var_one)  # prints 'happy'
# to get an attribute dynamically, use getattr
name = "var_three"
print(getattr(vars, name))  # prints '-24.24'

导入也是动态完成的另一个示例:

main.py

module_name = "vars"
module = __import__(module_name)   # imports vars.py to variable 'module'
var_name = "var_three"
print(getattr(module, var_name))  # prints '-24.24'

尽管对于包含变量的文件的名称只有在运行时才知道的情况,使用configparser:这样的东西可能更有意义

vars.ini中:

[DEFAULT]
var_one = happy
var_two = 2345
var_three = -24.24
var_four = Chocolate

main.py:中

import configparser
filename = "vars.ini"
varname = "var_one"
section = "DEFAULT"
config = configparser.ConfigParser()
config.read(filename)
print(config.get(section, varname))  # prints 'happy'

您可以使用;导入";导入在其他脚本中定义的函数和变量。如果你有

var_one = 'happy'

在一个名为myvariables.py的文件中,您可以编写以下内容来访问另一个文件中的该变量:

from myvariables import var_one

您可以像导入其他脚本中的函数一样导入变量。

import <yourscriptfile> (Without the .py extension)
<yourscriptfile>.varname1
<yourscriptfile>.varname2

等等

您可以使用星号表达式从文件中导入所有内容:

from filename import *
print(var_one)
print(var_two)
print(var_three)
print(var_four)

输出:

happy
2345
-24.24
Chocolate

使用文件myfile.py,您可以执行:

with open('myfile.py') as file:
exec(file.read())

变量将在您的命名空间中分配。如果你有很多文件,你可以循环通过,比如:

for script in ['myfile1.py1', 'myfile2.py', 'myfile3.py']:
with open(script) as file:
exec(file.read())
my_mood = var_one
number  = var_two
decimal = var_three
candy   = var_four

但您必须在循环中对这些变量进行处理,否则它们将被覆盖(或将它们保存在每个文件的某个数组中(。

但请注意,人们通常不鼓励使用exec。我更喜欢import方法,但在这种情况下可能这样可以吗?很乐意让人们输入他们鼓励或避免这种方法的原因。

最新更新