ходячий вложенный dict в питоне - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь пройтись по большому диктату, чтобы найти определенные ключи, я пытался использовать какой-то код, чтобы пройти по диктату, найденному здесь по другому вопросу, но я получаю ошибку:

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)

Для ясности, вот часть файла json, который загружен в dict python_obj (длина файла более 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
                      },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...