Edit: sample code https://replit.com/@JustinEzequiel/CoralFrighteningSign thanks to JustinEzequiel
This is my current code.
import yaml
filepath = input("input path to file: ")
data = {} # start a new dictionary
with open(filepath) as fh:
for index, line in enumerate(fh): # iterate by-line
if index % 4 == 1:
host = line # do any needed validation here
data[host] = {} # start another dict to write to
elif index % 4 == 2:
host = line.strip()
data[host]["hostname"] = line.strip() # host is still the block header!
with open("output.txt", "w") as fh:
yaml.dump(data, fh)
It outputs something like this
'
? 'D32489DJ
'
: hostname: 'D32489DJ
'
(if D32489DJ) was the host name.
I want to make it output something like
D32489DJ: hostname: D32489DJ nodename: D32489DJ username: rundeck tags: 'rundeck'
How can I modify my code to make this possible?
Snippet of file path
all you have to do is drag the file into your terminal after you run the program, make a new txt file named whatever you want.
put this exactly as it is line by line
hLKJH3019 BNKASDL32 dDASJKLH3 CNBAhsa32 ddkLJASCNjdaskA
that’s what it looks like in my file, just random host names that don’t make any sense separated line by line.
Advertisement
Answer
You forgot to string the n (linebreaks) at the end of each line.
from io import StringIO
import yaml
import sys
data = '''
hLKJH3019
aaa
dDASJKLH3
CNBAhsa32
ddkLJASCNjdaskA
bbb
BNKASDL32
dDASJKLH3
CNBAhsa32
ccc
hLKJH3019
BNKASDL32
dDASJKLH3
ddd
ddkLJASCNjdaskA
'''
fh = StringIO(data)
data = {} # start a new dictionary
for index, line in enumerate(fh): # iterate by-line
if index % 4 == 1:
host = line.strip() # do any needed validation here
data[host] = {} # start another dict to write to
elif index % 4 == 2:
data[host]["hostname"] = line.strip() # host is still the block header!
yaml.dump(data, sys.stdout)