Как прочитать и присвоить значение переменной python из файла (.db)

#python #database

#python #База данных

Вопрос:

Я пытаюсь извлечь VirtualIP и onvifPort из файла (.db).

У меня есть файл database.db, который выглядит следующим образом:

 
    {
    "devices": {
        "193619374120978": {
            "cameras": {
                "14:a7:8b:08:e0:7c": {
                    "slots": {
                        "3": {
                            "onvifPort": "17005",
                            "rtspPort": "18005",
                            "virtualIP": "10.27.15.75",
                            "pubIP": "",
                            "pubOnvifPort": "0",
                            "pubRtspPort": "0"
                        }
                    }
                },
                "ac:cc:8e:a8:84:e1": {
                    "slots": {
                        "2": {
                            "onvifPort": "17003",
                            "rtspPort": "18003",
                            "virtualIP": "10.27.15.75",
                            "pubIP": "",
                            "pubOnvifPort": "0",
                            "pubRtspPort": "0"
                        }
                    }
                },
                "14:a7:8b:22:86:f6": {
                    "slots": {
                        "1": {
                            "onvifPort": "17004",
                            "rtspPort": "18004",
                            "virtualIP": "10.27.15.75",
                            "pubIP": "",
                            "pubOnvifPort": "0",
                            "pubRtspPort": "0"
                        }
                    }
                }
            }
        }
    }
}
  

Я должен прочитать этот файл с помощью python и присвоить эти значения переменным python.

Я новичок в python, и я только что попробовал что-то подобное, но я не получаю желаемого результата. Я хотел бы знать, как открыть и прочитать файл (.db) и присвоить значения

 
    

with open("bmdatabase.db","r") as infile:
    inputs = json.load(infile)
#con = sqlite3.connect('bmdatabase.db')
#c = con.cursor()
for item in range(len(inputs["devices[].cameras[].slots[]"])):
    IP = inputs["devices[].cameras[].slots[]"][item]["virtualIP"]
    PORT = inputs["devices[].cameras[].slots[]"][item]["onvifPort"]

  

ожидаемый результат:
имя пользователя и пароль должны быть постоянными для всех 3 устройств

 
 
    IP = virtualIP of slot[1]from database.db file
    PORT = onvifPort of slot[1] from database.db file
    USERNAME = "admin" 
    PASSWORD = "Abcd"

    IP = virtualIP of slot[2]from database.db file
    PORT = onvifPort of slot[2] from database.db file
    USERNAME = "admin" 
    PASSWORD = "Abcd"

    IP = virtualIP of slot[3]from database.db file
    PORT = onvifPort of slot[3] from database.db file
    USERNAME = "admin" 
    PASSWORD = "Abcd"

  

кто-нибудь может мне помочь с этим??

Комментарии:

1. Можете ли вы отредактировать свой вопрос и указать ожидаемый результат?

2. @AndrejKesely отредактировано, теперь вы можете проверить

Ответ №1:

Вы можете попробовать этот пример для анализа ваших данных:

 db = {
    "devices": {
        "193619374120978": {
            "cameras": {
                "14:a7:8b:08:e0:7c": {
                    "slots": {
                        "3": {
                            "onvifPort": "17005",
                            "rtspPort": "18005",
                            "virtualIP": "10.27.15.75",
                            "pubIP": "",
                            "pubOnvifPort": "0",
                            "pubRtspPort": "0"
                        }
                    }
                },
                "ac:cc:8e:a8:84:e1": {
                    "slots": {
                        "2": {
                            "onvifPort": "17003",
                            "rtspPort": "18003",
                            "virtualIP": "10.27.15.75",
                            "pubIP": "",
                            "pubOnvifPort": "0",
                            "pubRtspPort": "0"
                        }
                    }
                },
                "14:a7:8b:22:86:f6": {
                    "slots": {
                        "1": {
                            "onvifPort": "17004",
                            "rtspPort": "18004",
                            "virtualIP": "10.27.15.75",
                            "pubIP": "",
                            "pubOnvifPort": "0",
                            "pubRtspPort": "0"
                        }
                    }
                }
            }
        }
    }
}


parsed = []
for device_id in db['devices']:
    for camera_mac in db['devices'][device_id]['cameras']:
        for slot in db['devices'][device_id]['cameras'][camera_mac]['slots']:
            parsed.append({
                'IP': db['devices'][device_id]['cameras'][camera_mac]['slots'][slot]['virtualIP'],
                'PORT': db['devices'][device_id]['cameras'][camera_mac]['slots'][slot]['onvifPort'],
                'USERNAME': 'admin',
                'PASSWORD': 'Abcd'
            })


from pprint import pprint
pprint(parsed)
  

С принтами:

 [{'IP': '10.27.15.75',
  'PASSWORD': 'Abcd',
  'PORT': '17005',
  'USERNAME': 'admin'},
 {'IP': '10.27.15.75',
  'PASSWORD': 'Abcd',
  'PORT': '17003',
  'USERNAME': 'admin'},
 {'IP': '10.27.15.75',
  'PASSWORD': 'Abcd',
  'PORT': '17004',
  'USERNAME': 'admin'}]
  

РЕДАКТИРОВАТЬ: для загрузки данных из файла

 import json
db = json.load(open('<your file-name>', 'r'))
print(db)
  

Комментарии:

1. не могли бы вы также, пожалуйста, рассказать мне, как открыть файл (db) и получить из него значения

2. @saivamsi Файл выглядит как Json. Вы можете использовать json module для его загрузки. Смотрите мое редактирование.

Ответ №2:

 for device in inputs["devices"]:
    for camera in device["cameras"]:
        for slot in camera["slots"]:
            IP = slot["virtualIP"]
            PORT = slot["onvifPort"]