#python
#python
Вопрос:
У меня есть 3 строки текста (это не python конфигурация):
[[inputs.snmp.field]]
name = "esxi-cpuload1"
oid = ".1.3.6.1.2.1.25.3.3.1.2.1"
мне нужно скопировать 96 раз с приращением числа после «cpuload» и моего oid, так что, например, esxi-cpuload2, cpuload3 и т.д. И .2, .3, .4 и т.д. Для моего oid.
До сих пор мне удавалось делать это с двумя списками, используя:
inputs = "[[inputs.snmp.field]]"
name = "esxi-cpuload"
oid = ".1.3.6.1.2.1.25.3.3.1.2."
name2 = [name str(i) for i in range(97)]
oid2 = [oid str(i) for i in range(97)]
что дает мне два списка с номерами (первая строка текста не нуждается в изменении). Однако как бы мне теперь объединить все эти данные с помощью Python? Или есть более простой способ сделать это?
Ответ №1:
Если я правильно понял ваш вопрос, у вас есть некоторый текст, который вы хотели бы воспроизвести с переменными параметрами. Если да, то это хороший вариант использования для str.format().
FMT = '''
[[inputs.snmp.field]]
name = "esxi-cpuload{i}"
oid = ".1.3.6.1.2.1.25.3.3.1.2.{i}"
'''
text = ''.join(FMT.format(i = i) for i in range(1, 96))
Комментарии:
1. Это именно то, чего я хотел с помощью простого решения, большое спасибо, приятель!
2. Из любопытства, зачем нам нужна
''.join
часть?3. @OtterVonBismarck Это зависит от ваших потребностей: вы можете объединить фрагменты в один текстовый блок (как в примере ответа) или вы могли бы создать
list
отдельные фрагменты:[FMT.format(i = i) for i in range(1, 96)]
.
Ответ №2:
'n'. join(zip([inputs] * 97, name2, oid2))
Первое выражение с входными данными преобразует эту строку в массив из одного элемента, а затем умножает его на 97, чтобы эта строка повторялась в массиве 97 раз.
Комментарии:
1. Я получаю следующую ошибку: ‘n’.join(zip([inputs] * 97, name2, oid2)) Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найден кортеж
2. Чтобы это сработало, вам нужно сгладить
'n'. join(a for b in zip([inputs] * 97, name2, oid2) for a in b)
.