我有很多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
方法,但在这种情况下可能这样可以吗?很乐意让人们输入他们鼓励或避免这种方法的原因。