Ваш код не выполняется, потому что в каждой итерации вы читаете только одну строку (которая может содержать хост или версию, но не обе, но вы записываете данные в csv. Давайте переберем весь текст, сопоставляя двойники:
с первой строкой Hostname .. и второй строкой version ... \ n работает как разрыв строки для Windows (я слышал, что Mac использует \ r не уверен). Теперь, когда вы сопоставляете двойники, вы можете получить как маршрутизатор, так и версию из одного и того же объекта сопоставления.
with open('testfile.txt','r',encoding='utf-8') as input:
txt = input.read()
pattern = re.compile(r'Hostname (.*)(\r\n?|\n)version (.*)')
match=pattern.finditer(txt)
for match1 in match:
with open('sample5.csv', 'a',newline='') as output:
writer = csv.DictWriter(output, fieldnames=HeaderFields)
writer.writerow({'Hostname': match1.group(1), 'version':
match1.group(3)})