String Replace Problem...
Sean McIlroy
sean_mcilroy at yahoo.com
Mon Feb 28 14:29:24 EST 2005
I can't claim to have studied your problem in detail, but I get
reasonable results from the following:
filename = 'Errors.txt'
S = open(filename,'r').read().split()
f = lambda x: (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or
x
open(filename,'w').write(' '.join(map(f,S)))
HTH
-------------------------------------------------------------------------
andrea.gavana at agip.it wrote in message news:<mailman.3138.1109605552.22381.python-list at python.org>...
> Hello NG,
>
> probably this is a basic question, but I'm going crazy... I am unable
> to find an answer. Suppose that I have a file (that I called "Errors.txt")
> which contains these lines:
>
> MULTIPLY
> 'PERMX' @PERMX1 1 34 1 20 1 6 /
> 'PERMX' @PERMX2 1 34 21 41 1 6 /
> 'PERMX' @PERMX3 1 34 1 20 7 14 /
> 'PERMX' @PERMX4 1 34 21 41 7 14 /
> 'PERMX' @PERMX5 1 34 1 20 15 26 /
> 'PERMX' @PERMX6 1 34 21 41 15 26 /
> 'PERMX' @PERMX7 1 34 1 20 27 28 /
> 'PERMX' @PERMX8 1 34 21 41 27 28 /
> 'PERMX' @PERMX9 1 34 1 20 29 34 /
> 'PERMX' @PERMX10 1 34 21 41 29 34 /
> 'PERMX' @PERMX11 1 34 1 20 35 42 /
> 'PERMX' @PERMX12 1 34 21 41 35 42 /
> 'PERMX' @PERMX13 1 34 1 20 43 53 /
> 'PERMX' @PERMX14 1 34 21 41 43 53 /
> 'PERMX' @PERMX15 1 34 1 20 54 61 /
> 'PERMX' @PERMX16 1 34 21 41 54 61 /
> /
>
> I would like to replace all the occurrencies of the "keywords" (beginning
> with the @ (AT) symbol) with some floating point value. As an example, this
> is what I do:
>
> # --- CODE BEGIN
>
> import re
> import string
>
> # Set Some Dummy Parameter Values
> parametervalues = range(1, 17)
>
> # Open And Read The File With Keywords
> fid = open("Errors.txt","rt")
> onread = fid.read()
> fid.close()
>
> # Find All Keywords Starting with @ (AT)
> regex = re.compile("[\@]\w+", re.IGNORECASE)
> keywords = regex.findall(onread)
>
> counter = 0
>
> # Try To Replace The With Floats
> for keys in keywords:
> pars = parametervalues[counter]
> onread = string.replace(onread, keys, str(float(pars)))
> counter = counter + 1
>
> # Write A New File With Replaced Values
> fid = open("Errors_2.txt","wt")
> fid.write(onread)
> fid.close()
>
> # --- CODE END
>
>
> Now, I you try to run this little script, you will see that for keywords
> starting from "@PERMX10", the replaced values are WRONG. I don't know why,
> Python replace only the "@PERMX1" leaving out the last char of the keyword
> (that are 0, 1, 2, 3, 4, 5, 6 ). These values are left in the file and I
> don't get the expected result.
>
> Does anyone have an explanation? What am I doing wrong?
>
> Thanks to you all for your help.
>
> Andrea.
>
> ------------------------------------------------------------------------------------------------------------------------------------------
> Message for the recipient only, if received in error, please notify the
> sender and read http://www.eni.it/disclaimer/
More information about the Python-list
mailing list