在Python中行走嵌套的字典

时间:2019-03-15 09:23:59

标签: python json list dictionary

我试图遍历一个大字典来找到某些键,我尝试使用一些代码来遍历在另一个问题上找到的字典,但是我得到了一个错误:

Traceback (most recent call last):
  File "C:\Users\ellioclv\Desktop\Test\pthonProcess.py", line 86, in <module>
    processModelFolder(modelFolder)
  File "C:\Users\ellioclv\Desktop\Test\pthonProcess.py", line 63, in processModelFolder
    dictWalk(python_obj, IDCO)
  File "C:\Users\ellioclv\Desktop\Test\pthonProcess.py", line 75, in dictWalk
    stack = d.id()
AttributeError: 'str' object has no attribute 'id'

我认为这与包含列表而不是其他字典的字典有关,有没有办法使这项工作有效,或者将所有内容转换为字典?

这是有问题的代码段:

else:
        with open(fileName , "r") as in_file:

            IDCO = None
            for n, line in enumerate(in_file, 1):
                if line.startswith('IDCO_IDENTIFICATION'):
                    #Checks if the second part of each line is a ID tag in IDs
                    if line.split('"')[1] in IDs:
                        #If ID found it is stored as IDCO
                        IDCO = line.split('"')[1]
                    else:
                        if IDCO:
                            pass
                            IDCO = None
                #Checks if the first part of each line is a Prop in Propterties
                elif IDCO and line.split(' ')[0] in Properties:
                    print('Found! ID:{} Prop:{} Value: {}'.format(IDCO, line.split('=')[0][:-1], line.split('=')[1][:-1]))
                    print("\n")
                    #Stores the property name and value
                    name = str(line.split(' ')[0])
                    value = str(line.split(' ')[2])
                    #json file editing        
                    with open(fileNameThree , "r+") as json_data:
                        python_obj = json.load(json_data)

                    dictWalk(python_obj, IDCO)



    with open(fileNameThree , "w") as json_data:
        json.dump(python_obj, json_data, indent = 1)



        print('Processed {} lines in file {}'.format(n , fileName))

def dictWalk(obj, key):
    stack = d.id()
    while stack:
        k, v = stack.pop()
        if isinstance(v, dict):
            stack.extend(v.iteritems())
        else:
            print("Made it")

这是上下文的所有代码:

import os
import json
import shutil
import re
import fileinput
from collections import OrderedDict

#Finds and lists the folders that have been provided
d='.'
folders = list(filter (lambda x: os.path.isdir(os.path.join(d, x)), os.listdir(d)))
print("Folders found: ")
print(folders)
print("\n")


def processModelFolder(inFolder):

#Creating the file names 
    fileName = os.path.join(d, inFolder, inFolder + ".mdl")
    fileNameTwo = os.path.join(d, inFolder, inFolder + ".vg2.json")
    fileNameThree = os.path.join(d, inFolder, inFolder + "APPENDED.vg2.json")
#copying the json file so the new copy can be appended
    shutil.copyfile(fileNameTwo, fileNameThree)
#assigning IDs and properties to search for in the mdl file
    IDs = ["7f034e5c-24df-4145-bab8-601f49b43b50"]
    Properties = ["IDSU_FX[0]","IDSU_FY[0]","IDSU_FZ[0]"]
#Basic check to see if IDs and Properties are valid
    for i in IDs:
             if len(i) != 36:
                print("ID may not have been valid and might not return the results you expect, check to ensure the characters are correct: ")
                print(i)
                print("\n")
    if len(IDs) == 0:
        print("No IDs were given!")
    elif len(Properties) == 0:
        print("No Properties were given!")
#Reads code untill an ID is found           
    else:
        with open(fileName , "r") as in_file:

            IDCO = None
            for n, line in enumerate(in_file, 1):
                if line.startswith('IDCO_IDENTIFICATION'):
                    #Checks if the second part of each line is a ID tag in IDs
                    if line.split('"')[1] in IDs:
                        #If ID found it is stored as IDCO
                        IDCO = line.split('"')[1]
                    else:
                        if IDCO:
                            pass
                            IDCO = None
                #Checks if the first part of each line is a Prop in Propterties
                elif IDCO and line.split(' ')[0] in Properties:
                    print('Found! ID:{} Prop:{} Value: {}'.format(IDCO, line.split('=')[0][:-1], line.split('=')[1][:-1]))
                    print("\n")
                    #Stores the property name and value
                    name = str(line.split(' ')[0])
                    value = str(line.split(' ')[2])
                    #json file editing        
                    with open(fileNameThree , "r+") as json_data:
                        python_obj = json.load(json_data)

                    dictWalk(python_obj, IDCO)



    with open(fileNameThree , "w") as json_data:
        json.dump(python_obj, json_data, indent = 1)



        print('Processed {} lines in file {}'.format(n , fileName))

def dictWalk(obj, key):
    stack = d.id()
    while stack:
        k, v = stack.pop()
        if isinstance(v, dict):
            stack.extend(v.iteritems())
        else:
            print("Made it")



for modelFolder in folders:
processModelFolder(modelFolder)

为了清楚起见,这是一些加载到dict python_obj中的json文件(该文件的长度超过79000行,因此请忽略它遗漏了大量的右括号,我只用了前300行为了显示它的外观,整个json文件的结构类似于所示示例):

{
  "id": "79cb20b0-02be-42c7-9b45-96407c888dc2",
  "tenantId": "00000000-0000-0000-0000-000000000000",
  "name": "2-stufiges Stirnradgetriebe",
  "description": null,
  "visibility": "None",
  "method": "IDM_CALCULATE_GEAR_COUPLED",
  "created": "2018-10-16T10:25:20.874Z",
  "createdBy": "00000000-0000-0000-0000-000000000000",
  "lastModified": "2018-10-16T10:25:28.226Z",
  "lastModifiedBy": "00000000-0000-0000-0000-000000000000",
  "client": "STRING_BEARINX_ONLINE",
  "project": {
    "id": "10c37dcc-0e4e-4c4d-a6d6-12cf65cceaf9",
    "name": "proj 2",
    "isBookmarked": false
  },
  "rootObject": {
    "id": "6ff0010c-00fe-485b-b695-4ddd6aca4dcd",
    "type": "IDO_GEAR",
    "children": [
      {
        "id": "1dd94d1a-e52d-40b3-a82b-6db02a8fbbab",
        "type": "IDO_SYSTEM_LOADCASE",
        "children": [],
        "childList": "SYSTEMLOADCASE",
        "properties": [
          {
            "name": "IDCO_IDENTIFICATION",
            "value": "1dd94d1a-e52d-40b3-a82b-6db02a8fbbab"
          },
          {
            "name": "IDCO_DESIGNATION",
            "value": "Lastfall 1"
          },
          {
            "name": "IDSLC_TIME_PORTION",
            "value": 100
          },
          {
            "name": "IDSLC_DISTANCE_PORTION",
            "value": 100
          },
          {
            "name": "IDSLC_OPERATING_TIME_IN_HOURS",
            "value": 1
          },
          {
            "name": "IDSLC_OPERATING_TIME_IN_SECONDS",
            "value": 3600
          },
          {
            "name": "IDSLC_OPERATING_REVOLUTIONS",
            "value": 1
          },
          {
            "name": "IDSLC_OPERATING_DISTANCE",
            "value": 1
          },
          {
            "name": "IDSLC_ACCELERATION",
            "value": 9.81
          },
          {
            "name": "IDSLC_EPSILON_X",
            "value": 0
          },
          {
            "name": "IDSLC_EPSILON_Y",
            "value": 0
          },
          {
            "name": "IDSLC_EPSILON_Z",
            "value": 0
          },
          {
            "name": "IDSLC_CALCULATION_WITH_OWN_WEIGHT",
            "value": "CO_CALCULATION_WITHOUT_OWN_WEIGHT"
          },
          {
            "name": "IDSLC_CALCULATION_WITH_TEMPERATURE",
            "value": "CO_CALCULATION_WITH_TEMPERATURE"
          },
          {
            "name": "IDSLC_FLAG_FOR_LOADCASE_CALCULATION",
            "value": "LB_CALCULATE_LOADCASE"
          },
          {
            "name": "IDSLC_STATUS_OF_LOADCASE_CALCULATION",
            "value": false
          }
        ],
        "position": 1,
        "order": 1,
        "support_vector": {
          "x": 0,
          "y": 0,
          "z": 0
        },
        "u_axis_vector": {
          "x": 1,
          "y": 0,
          "z": 0
        },
        "w_axis_vector": {
          "x": 0,
          "y": 0,
          "z": 1
        },
        "role": "_none_"
      },
      {
        "id": "ab7fbf37-17bb-4e60-a543-634571a0fd73",
        "type": "IDO_SHAFT_SYSTEM",
        "children": [
          {
            "id": "7f034e5c-24df-4145-bab8-601f49b43b50",
            "type": "IDO_RADIAL_ROLLER_BEARING",
            "children": [
              {
                "id": "0b3e695b-6028-43af-874d-4826ab60dd3f",
                "type": "IDO_RADIAL_BEARING_INNER_RING",
                "children": [
                  {
                    "id": "330aa09d-60fb-40d7-a190-64264b3d44b7",
                    "type": "IDO_LOADCONTAINER",
                    "children": [
                      {
                        "id": "03036040-fc1a-4e52-8a69-d658e18a8d4a",
                        "type": "IDO_DISPLACEMENT",
                        "children": [],
                        "childList": "DISPLACEMENT",
                        "properties": [
                          {
                            "name": "IDCO_IDENTIFICATION",
                            "value": "03036040-fc1a-4e52-8a69-d658e18a8d4a"
                          },
                          {
                            "name": "IDCO_DESIGNATION",
                            "value": "Displacement 1"
                          }
                        ],
                        "position": 1,
                        "order": 1,
                        "support_vector": {
                          "x": -201.3,
                          "y": 0,
                          "z": -229.8
                        },
                        "u_axis_vector": {
                          "x": 1,
                          "y": 0,
                          "z": 0
                        },
                        "w_axis_vector": {
                          "x": 0,
                          "y": 0,
                          "z": 1
                        },
                        "shaftSystemId": "ab7fbf37-17bb-4e60-a543-634571a0fd73",
                        "role": "_none_"
                      },
                      {
                        "id": "485f5bf4-fb97-415b-8b42-b46e9be080da",
                        "type": "IDO_CUMULATED_LOAD",
                        "children": [],
                        "childList": "CUMULATEDLOAD",
                        "properties": [
                          {
                            "name": "IDCO_IDENTIFICATION",
                            "value": "485f5bf4-fb97-415b-8b42-b46e9be080da"
                          },
                          {
                            "name": "IDCO_DESIGNATION",
                            "value": "Cumulated load 1"
                          },
                          {
                            "name": "IDCO_X",
                            "value": 0
                          },
                          {
                            "name": "IDCO_Y",
                            "value": 0
                          },
                          {
                            "name": "IDCO_Z",
                            "value": 0
                          }
                        ],
                        "position": 2,
                        "order": 1,
                        "support_vector": {
                          "x": -201.3,
                          "y": 0,
                          "z": -229.8
                        },
                        "u_axis_vector": {
                          "x": 1,
                          "y": 0,
                          "z": 0
                        },
                        "w_axis_vector": {
                          "x": 0,
                          "y": 0,
                          "z": 1
                        },
                        "shaftSystemId": "ab7fbf37-17bb-4e60-a543-634571a0fd73",
                        "role": "_none_"
                      }
                    ],
                    "childList": "LOADCONTAINER",
                    "properties": [
                      {
                        "name": "IDCO_IDENTIFICATION",
                        "value": "330aa09d-60fb-40d7-a190-64264b3d44b7"
                      },
                      {
                        "name": "IDCO_DESIGNATION",
                        "value": "Load container 1"
                      },
                      {
                        "name": "IDLC_LOAD_DISPLACEMENT_COMBINATION",
                        "value": "LOAD_MOMENT"
                      },
                      {
                        "name": "IDLC_TYPE_OF_MOVEMENT",
                        "value": "LB_ROTATING"
                      },
                      {
                        "name": "IDLC_NUMBER_OF_ARRAY_ELEMENTS",
                        "value": 20
                      }
                    ],
                    "position": 1,
                    "order": 1,
                    "support_vector": {
                      "x": -201.3,
                      "y": 0,
                      "z": -229.8
                    },
                    "u_axis_vector": {
                      "x": 1,
                      "y": 0,
                      "z": 0
                    },
                    "w_axis_vector": {
                      "x": 0,
                      "y": 0,
                      "z": 1
                    },
                    "shaftSystemId": "ab7fbf37-17bb-4e60-a543-634571a0fd73",
                    "role": "_none_"
                  },
                  {
                    "id": "3258d217-e6e4-4a5c-8677-ae1fca26f21e",
                    "type": "IDO_RACEWAY",
                    "children": [],
                    "childList": "RACEWAY",
                    "properties": [
                      {
                        "name": "IDCO_IDENTIFICATION",
                        "value": "3258d217-e6e4-4a5c-8677-ae1fca26f21e"
                      },
                      {
                        "name": "IDCO_DESIGNATION",
                        "value": "Raceway 1"
                      },
                      {
                        "name": "IDRCW_UPPER_DEVIATION_RACEWAY_DIAMETER",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_LOWER_DEVIATION_RACEWAY_DIAMETER",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_OFFSET",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_ANGLE",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_CURVATURE_RADIUS",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_CENTER_POINT_OFFSET",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_NUMBER_OF_WAVES",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_AMPLITUDE",
                        "value": 0
                      },
                      {
                        "name": "IDRCW_PROFILE_POSITION_OF_FIRST_WAVE",
                        "value": 0
                      },

0 个答案:

没有答案