gpt4 book ai didi

python - 配置 python 脚本知道它的文件名

转载 作者:行者123 更新时间:2023-12-01 06:10:34 26 4
gpt4 key购买 nike

我想通过编写一些带有变量赋值和函数的 Python 代码来保存复杂的配置,稍后我将通过 ConfigReader 类导入这些代码。

基本上到目前为止我已经编写了我的配置文件:

a=1

还有一个类似的类

c=ConfigReader("C:\my_file")
print(c.a)

为此我使用了 exec(),但现在我还希望配置文件知道它自己的文件名(因为目录提供了某些变量的信息)

所以我需要一个配置文件,例如:

a=parse_project_number_from_dir(__file__)

看来我需要用Python 3中加载的一些imp模块来替换exec()?这是执行一个简单文件并使其知道其路径的最简单方法吗?

此外,我希望我的 ConfigReader 类将所有变量读入字典中。 (使用 exec 我只查看了 locals() )。我现在应该做什么,我可以不导入配置文件中的辅助导入(如 parse_project_number_from_dir 函数),而只导入我实际定义的内容(即 a=)吗?

最佳答案

当你 exec Python 脚本,没有文件名,因为您给出 exec字符串或编译对象。 exec命令无法知道你从哪里得到这个字符串。

但是有一种方法可以与您传递给 exec 的配置文件共享知识。 。例如...

假设您有一个配置文件,上面写着

print myname

然后运行以下 Python 脚本:

 ns = {}
ns["myname"] = "sample.cfg"
s = open("sample.cfg","r")
exec s in ns # in 3.x use exec(s,ns) instead

这将创建一个新的命名空间,并在该命名空间中创建一个名为 myname 的变量。由于脚本知道它将要打开的文件的名称,因此它可以将其分配给一个变量。效果同exec 'myname = "sample.cfg"' in ns .

然后,当您执行配置文件时,您可以通过告诉脚本使用 ns 来共享脚本的知识。命名空间。如果这看起来有点令人困惑,请阅读一下 globalslocals和命名空间。

关于python - 配置 python 脚本知道它的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6170141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com