Python Forum

Full Version: edit text files/ add lines if missing (regex)
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
i am trying to layout some code to edit aix stanza files. basically i want to add/remove/edit special formated config values from various text files. in the end this should come out as an working ansible module ;-).

this is the desired format:

stanza1:
        value1 = attr1
        value2 = attr2

stanza2:
        value1 = attr1
        value3 = attr1

stanza3:
        value1 = attr1
        value1 = attr1
i want to search for the stanza and only add it if it does not exists. a newline is needed above each stanza to separate it from the above. the value/attr pairs should have a "tab' in front of them. it should be possibe to remove/add value/attr pairs to stanzas and removal of the whole stanza (incl. related value/attrs).

i already experimented with regexes but the follwing leaves the file empty.

#!/usr/bin/env python

import re


with open('stanza_test', 'r+') as fh:
    text = fh.read()
    if re.search(r'(?m)^shittyjohn:', text):
        print('Found.')
    else:
        print('Not found.')
        pattern = r'^((?:[^\n]+\n){%d})'
        fh.seek(0)
        fh.write(
            re.sub(pattern, r'\1shittyjohn:\n', text)
        )
any hints,food for thought,ideas, code snippets would be of great help, as i am little bit stuck with this.
Have you checked to ensure that your regexes work? Can you post an excerpt of the file?
hmm..i started small with just trying to add a single stanza line in an empty file, with the code snippet in my first post.
when the file is emtpy it just prints "Not found", which is correct, but not adds anything. if i add the stanza line before manually, it just prints "Found". so i guess the regex works "somewhat".
update: got the first step working, i can now add stanza lines if they dont exist, and avoid duplicates. it's something Shy

#!/usr/bin/env python

import re

config_file="stanza_test"
stanza_name="smittyjohn"

with open(config_file, 'r+') as fh:
    text = fh.read()
    if re.search('(?m)^' + stanza_name + ':', text):
        print('stanza found.')
    else:
        print('stanza not found.')
        fh.seek(0)
        fh.write(
            text + "\n"  + stanza_name + ":\n"
        )
root@lpgaixmgmtlx01:/root>./add_stanza.py
stanza not found.
root@lpgaixmgmtlx01:/root>./add_stanza.py
stanza found.
root@lpgaixmgmtlx01:/root>./add_stanza.py
stanza found.

root@lpgaixmgmtlx01:/root>cat stanza_test

smittyjohn:

shittyjohn: