Описание

У меня есть сценарий → report_creator.py, которому потребуются некоторые переменные из другого сценария Python → extracted_data.py. Количество переменных из extracted_data.py всегда будет зависеть от системы, из которой он извлекает данные (если в системе 1 сервер, у нас будет 1 переменная, если в системе 2 сервера, у нас будет 2 переменные и т. Д. ). Вы никогда не сможете узнать точное количество переменных, которые будет иметь extracted_data.py.

Допустим, мы извлекли данные из системы с двумя серверами, и файл extracted_data.py выглядит примерно так:

parameterx_server1 = "value"
parameterx_server2 = "another value"

Что у меня есть: report_creator.py:

import os
import extracted_data

#Extract all variables names starting with parameterx from extracted_data.py and store them into a list

variables = os.popen("""cat extracted_data.py | grep '^parameterx_*' | awk '{print $1}'""").read().strip()
variables = variables.split("\n")

#After the execution of the command, the list looks like this:
# variables = ['parameterx_server1', 'parameterx_server2']

Проблема

Теперь у скрипта есть список, содержащий все переменные parameterx из extracted_data.py:

variables = ['parameterx_server1', 'parameterx_server2']

Осталось только получить соответствующее значение каждой переменной из списка переменных из extracted_data.py, например:

print extracted_data.parameterx_server1

Я пробовал что-то вроде:

for variable in variables:
    print extracted_data.variable

Но по какой-то причине я получаю AttributeError: 'module' object has no attribute 'variable'.

1
Catalin S. 13 Окт 2020 в 20:33

1 ответ

Лучший ответ

Вы можете извлечь переменные и их значения, определенные в файле extracted_data.py, следующим образом:

import extracted_data

extract_vars = {name: getattr(extracted_data, name)
                    for name in dir(extracted_data) if not name.startswith('_')}
print(extract_vars)  # -> {'parameterx_server2': 'another value', 'parameterx_server1': 'value'}

Как показано, после этого extract_vars представляет собой словарь, содержащий как имена переменных , так и связанные значения.

1
martineau 13 Окт 2020 в 18:18