How about creating a new string instead of replacing the original.

def replace_keys(text, replacements_dict):
    text_list = text.split('\n')
    new_text = ''
    for line in text_list:
        key=line.split('=')[0]
        if key.strip() in replacements_dict:
            new_text = new_text + key + '=' + replacements_dict[key.strip()]
+ "\n"
        else:
            new_text = new_text + line
    return new_text


On 5 April 2011 09:32, Vlastimil Brom <vlastimil.b...@gmail.com> wrote:

> 2011/4/5 Martin De Kauwe <mdeka...@gmail.com>:
> > Hi,
> >
> > So i want to replace multiple lines in a text file and I have reasoned
> > the best way to do this is with a dictionary. I have simplified my
> > example and broadly I get what I want however I am now printing my
> > replacement string and part of the original expression. I am guessing
> > that I will need to use a more complicated expression than I am
> > currently am to achieve what I want?
> >
> > my aim is to match the expression before the "=" and replace the
> > string after the equals...
> >
> > My failed example...
> > [...]
> >
> > thanks.
> > --
> >
>
> Hi,
> I guess, you would have to split the line and extract the substrings
> before and after "=" and replace only the value part.
> Or you can use regular expression replace with a replacement function,
> e.g. like the following sample.
> The re pattern would probably need some tweaking to match the variable
> names, the values and the whitespace around "="; and, of course, it
> shouldn't match anything unwanted in the original text  ...
>
> hth,
>  vbr
> ####################################
>
> import re
>
> orig_str = """structcn = 150.0
> metfrac0 = 0.85
> unknown7 = 38.2
> """
>
> replacement_dict = {"structcn": "999.0", "metfrac0": "0.85"}
>
> def repl_fn(m):
>    return m.group(1) + m.group(2) + replacement_dict.get(m.group(1),
> m.group(3))
>
> new_str = re.sub(r"([\w\d_]+?)( = )([\d.-]+)", repl_fn, orig_str)
>
> print new_str
>
> ####################################
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to