f = lambda x: (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or x
See "Inappropriate use of Lambda" in http://www.python.org/moin/DubiousPython.
You're creating a named function, so there's no reason to use the anonymous function syntax. Try:
def f(x): return (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or x
or if it must be on one line:
def f(x): return (x[0]=='@' and x[6:] + '.0') or (x=='/' and x + '\n') or x
Personally, I would probably write this as IMHO more readable:
infile, outfile = open("Errors.txt"), open("Errors_2.txt") for i, line in enumerate(infile): permx, atpermx, rest = line.split(None, 2) outfile.write(' '.join([permx, str(parameter_values[i]), rest]))
In action:
py> s = """\ ... '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 ... """ py> parameter_values = range(1, 17) py> for i, line in enumerate(s.splitlines()): ... permx, atpermx, rest = line.split(None, 2) ... print ' '.join([permx, str(parameter_values[i]), rest]) ... 'PERMX' 1 1 34 1 20 1 6 'PERMX' 2 1 34 21 41 1 6 'PERMX' 3 1 34 1 20 7 14 'PERMX' 4 1 34 21 41 7 14 'PERMX' 5 1 34 1 20 15 26 'PERMX' 6 1 34 21 41 15 26 'PERMX' 7 1 34 1 20 27 28 'PERMX' 8 1 34 21 41 27 28 'PERMX' 9 1 34 1 20 29 34 'PERMX' 10 1 34 21 41 29 34 'PERMX' 11 1 34 1 20 35 42 'PERMX' 12 1 34 21 41 35 42 'PERMX' 13 1 34 1 20 43 53 'PERMX' 14 1 34 21 41 43 53 'PERMX' 15 1 34 1 20 54 61 'PERMX' 16 1 34 21 41 54 61
STeVe -- http://mail.python.org/mailman/listinfo/python-list