通过另一个 python 脚本从 python 文件中检索变量值的最佳方法? [复制]
Posted
技术标签:
【中文标题】通过另一个 python 脚本从 python 文件中检索变量值的最佳方法? [复制]【英文标题】:Best way to retrieve variable values from a python file through another python script? [duplicate] 【发布时间】:2020-10-30 02:26:34 【问题描述】:我有许多 python 文件,它们的变量名相同但值不同。像这样的东西合二为一:
var_one = 'happy'
var_two = '2345'
var_three = '-24.24'
var_four = 'Chocolate'
我需要编写一个可以读取这些文件的 Python 脚本,当我请求 var_one
时,它会返回 happy
。如果我要求 var_two
它返回 2345
等等。
现在我有一个兼容 python 2 的工具箱,它使用以下内容来执行此操作:
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
?
【问题讨论】:
工具箱对你来说是一个外部库吗? 以上内容看起来只是变量,你可以将这些内容保存在文本文件中。 python脚本可以直接访问它并将其保存在字典中。然后你做你想要的步骤 @subbu 怎么样?如果您有答案,请发布答案 @rajah 是的,我相信。它是由公司内部的另一个人制作的,并且非常广泛,所以我不知道他们需要多长时间才能使其符合 Python 3 标准。 @newtopython 见How to import a module given the full path? 虽然我认为alaniwi 的configparser
解决方案是一个更好的解决方案。
【参考方案1】:
你可以这样做:
在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'
【讨论】:
“动态获取属性”是什么意思?这两种方法有什么区别 @newtopython 将属性名称直接放入源代码可能并不总是很方便。在第二个示例中,您将属性的名称存储在字符串中,例如,它可能是从文件或用户输入中读取的,而不是在源代码中,您仍然可以进行查找。这为您提供了与问题示例中的字典查找相同的灵活性。 @newtopython 我现在添加了另一个示例,说明在不方便对import vars
行进行硬编码时。
如何导入特定的文件名?我会更新我的问题,使其更具体。
@newtopython 我现在在args.file
的问题中看到了您的评论,我认为这里的__import__
解决方案可以解决这个问题。但我还添加了另一种可能的 ini 文件供您考虑。【参考方案2】:
使用文件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
但是您必须在循环中对这些变量进行处理,否则它们会被覆盖(或将它们保存在每个文件的某个数组中)。
但请注意generally people discourage using exec。我更喜欢import
方法,但在这种情况下可能没问题?很乐意让人们输入他们为什么鼓励或避免这种方法。
【讨论】:
【参考方案3】:您可以使用星号表达式从文件中导入所有内容:
from filename import *
print(var_one)
print(var_two)
print(var_three)
print(var_four)
输出:
happy
2345
-24.24
Chocolate
【讨论】:
【参考方案4】:您可以像从其他脚本中导入函数一样导入变量。
import <yourscriptfile> (Without the .py extension)
<yourscriptfile>.varname1
<yourscriptfile>.varname2
等等
【讨论】:
这类似于约书亚的回答,可能对我有用!我会试试然后回来。 别担心,顺便说一句,你也可以反过来做。假设您想为另一个脚本定义一个变量,您可以简单地执行您可以使用“导入”来导入在其他脚本中定义的函数和变量。如果你有
var_one = 'happy'
在名为 myvariables.py 的文件中,您可以编写以下内容以在另一个文件中访问此变量:
from myvariables import var_one
【讨论】:
如果我只有几个变量但其中有很多变量并且我不想以这种方式导入所有变量,那就太好了。很高兴知道这一点!以上是关于通过另一个 python 脚本从 python 文件中检索变量值的最佳方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章