Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将文件中的数据添加到类dict中_Python_Class_Dictionary_Exec - Fatal编程技术网

Python 将文件中的数据添加到类dict中

Python 将文件中的数据添加到类dict中,python,class,dictionary,exec,Python,Class,Dictionary,Exec,我已经编写了一个类dict,并基于该类dict的蓝图构建了一个数据文件 for num in range(0, 1) some_dict.update({f"id_{num}: copy.deepcopy(SomeClass.__init__.__kwdefaults__)}) 然后在可用时用实际信息改写默认值 现在,我想将该数据文件加载到类dict中,以便通过键和值调用其数据,以便使用它们执行进一步的计算 main.py中的类dict: class SomeClass:

我已经编写了一个类dict,并基于该类dict的蓝图构建了一个数据文件

for num in range(0, 1)
    some_dict.update({f"id_{num}: copy.deepcopy(SomeClass.__init__.__kwdefaults__)})
然后在可用时用实际信息改写默认值

现在,我想将该数据文件加载到类dict中,以便通过键和值调用其数据,以便使用它们执行进一步的计算

main.py中的类dict:

class SomeClass:
    def __init__(self, *, a=None, b=[]):
        self.a = a
        self.b = b
具有以下行结构的file.py:

id_1 = SomeClass{'a': 'x', 'b': ['c', 'd']}
id_2 = SomeClass{'a': 'y', 'b': ['e', 'f']}
我想加载文件并将其放入类dict中,就像我写的那样:

id_1 = SomeClass(a='x', b= ['c', 'd'])
直接进入main.py

首先,我在for循环中使用.split()和.replace()方法的组合来分离file.py中的行,以获得键“a”和“b”,此时它们仍然是字符串。 然后我尝试对它们求值()或exec(),以便将字符串转换为引用名称

with open(r"file.py", mode="r", errors="ignore") as file:
    line_count = 0
    for line in file:
        split_line1 = line.split("'")
        split_line2 = line.split("[")[1].split("]")
        a_key = split_line1[1]
        a_value = split_line1[3]
        b_key = split_line1[5]
        b_value = split_line2[0]
        f"id_{line_count} = " + SomeClass(eval(a_key) + "=" + a_value, eval(b_key) + "=" + b_value)
        line_count += 1
        
但我最终得到了一个:

NameError: name 'a' is not defined

我在构建file.py时已经遇到了NameError问题,必须解决它。如果不使用eval()或exec(),我看不到如何达到我的目标,因此会遇到NameError,如果不能从文件中向类dict提供信息,我看不到类dict的使用。

“first i…[代码的详细描述]”我们无法根据描述调试代码。请显示您尝试执行此操作时使用的实际代码。为什么您一开始就这样做?@juanpa arrivillaga我选择使用kwdefaults的类,而不是常规dict,因为它更灵活。如果你知道更好的方法,我愿意听取建议。@Karl Knechtel添加了代码“eval(a_键)和eval(b_键)抛出NameErrors。不,我的意思是,你为什么要从这样的文件中保存/加载?为什么不是JSON?或pickle?@juanpa arrivillaga主要是因为我对这两个文件都不熟悉,但如果这能让任务更简单,我会研究它们。