Описание
У меня есть сценарий → 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 ответ
Вы можете извлечь переменные и их значения, определенные в файле 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
представляет собой словарь, содержащий как имена переменных , так и связанные значения.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.