Я потратил несколько дней на изучение этой темы, рассматривая почти каждую итерацию ответов на этот вопрос, и после проб и ошибок я все еще не смог получить что-то, что работает где-то близко к тому, что мне нужно. (Я разместил мой фактический отформатированный код ниже, а не часть описания) Может быть, это просто фундаментальный недостаток моего понимания Python и понимания списков / словарей, но я надеялся, что кто-то может помочь мне или направить меня в правильном направлении, прежде чемубавить меня или закрыть билет. Сначала позвольте мне объяснить, что я пытаюсь сделать: 1. Возьмите выходные данные Netsh для IP-интерфейсов в Windows и сохраните их. 2. Управляйте списком так, чтобы я создал словарь с ключами из списка заголовков. 3. Ключи из списка заголовков будут иметь значения, которые являются другим словарем. 4. Вложенный словарь должен иметь ключи, которые имеют описание netsh (DHCP Enabled :), а значения разделены на «:».
например: {'Конфигурация для интерфейса "Ethernet 2"': {DHCP Enabled: yes, InterfaceMetric: 75 ...}, {Конфигурация для интерфейса "Local Area Connection * 1" ': {DHCP Enabled:да, InterfaceMetric: 25, ...},}
Вместо этого я получаю:
{'DHCP enabled': [' No'], 'InterfaceMetric': [' 75'], 'IP Address': [' 127.0.0.1'], 'Subnet Prefix': [' 127.0.0.0/8 (mask 255.0.0.0)'], 'Default Gateway': [' 10.1.42.1'], 'Gateway Metric': [' 0']}
Однако, когда я применяю свою попытку понимания словаря, я получаю что-то, что выводит списокпорядка и затем не перебирает когда-либо элемент в списке и делает правильные ключи из них. В списке есть несколько элементов списка. Я не уверен, где я иду не так, и я заранее прошу прощения, если мой вопрос не сформулирован должным образом, если я не уясню.
from subprocess import check_output
import pprint
def get_all_network_info():
s = check_output(['netsh', 'interface', 'ip', 'show', 'address']).decode('utf-8')
s = s.splitlines()
return s
def run_parser():
results = []
split_results = []
headers = []
s = get_all_network_info()
for i in s:
results.append(i.strip())
for j in results:
if j.find("Configuration") != -1:
headers.append(j)
elif j != "":
split_results.append(j.split(":"))
# Creating Dictionaries
ipdict = {item[0]: item[1:] for item in split_results}
for k, v in ipdict.items():
for i in v:
print(k, i.strip())
print(ipdict)
def main():
run_parser()
if __name__ == '__main__':
main()
Теперь я знаю, что на самом деле я не вызывал итерацию по списку заголовков. Прямо сейчас я просто пытаюсь получить список split_results, чтобы стать правильным словарем.