嵌套Python对象上属性名的递归查找和替换

2024-04-27 00:58:23 发布

您现在位置:Python中文网/ 问答频道 /正文

第三方为我提供了一个数据结构,它是一堆嵌套的Python对象。这是一棵树。这些对象上的某些属性名是Python保留字,因此尝试访问它们会导致语法错误:

 >>> print mat['model'].rules[8].def.blocklabel
   File "<stdin>", line 1
     print mat['model'].rules[8].def.blocklabel
                              ^
 SyntaxError: invalid syntax

这里,解释器抱怨使用“def”作为属性名。我希望递归地搜索数据结构并更改任何有问题的属性名。最简单的方法是什么?最严格的配方获胜!在

干杯!在


Tags: 对象数据结构model属性defstdinlinerules
1条回答
网友
1楼 · 发布于 2024-04-27 00:58:23

以下是对你们中的一些人,像我一样,正在处理的不太一般的答案scipy.io.loadmat公司()只想继续你的一天:

from scipy.io.matlab.mio5_params import mat_struct as matlab_struct
def recursive_rename( obj,oldattr,newattr ) :        
    if isinstance(obj,matlab_struct) :
        for attr in obj._fieldnames :
            tmp = getattr(obj,attr)
            recursive_rename( tmp, oldattr, newattr )
            if attr == oldattr :
                setattr( obj, newattr, tmp )
                delattr( obj, oldattr )
                obj._fieldnames.remove( oldattr )
                obj._fieldnames.append( newattr )
    elif isinstance(obj,numpy.ndarray) and obj.dtype == object :
        iter = itertools.product(*[xrange(z) for z in obj.shape])  
        for i in iter : recursive_rename(obj[i], oldattr, newattr )
    else : pass

我没有分数!在

相关问题 更多 >