James wrote: > Hi. :) > > I'm trying to write a loop to simplify my life (and code :)). The > loop is going to iterate over a list of values that I have to change > in a file. I think my problem is better described with some code. :)
Use a dictionary instead of a tuple ... # variables editValues = { "interface": "eth0", "address": "192.168.1.5", "mask": "255.255.255.0", "gateway": "192.168.1.1" } > def replaceText( old , new , file ): > for line in fileinput.FileInput( file , inplace = 1 ): > line = line.replace( old , new ) > sys.stdout.write( line ) > for key in editValues.keys(): replaceText('$' + key + '$' , editValues[key] , '/etc/conf.d/net' ) > > config_$interface$=( "$address$ netmask $mask$" ) > routes_$interface$=( "default via $gateway$" ) Are you locked into this substitution format? If not, then how about something like this: # /etc/conf.d/net config_%(interface)s=( "%(address)s netmask %(mask)s" ) routes_%(interface)s=( "default via %(gateway)s" ) You can then use python string formating (described here: http://docs.python.org/lib/typesseq-strings.html), and pass the dict directly. Note: if your file already contains '%' symbols that won't be substituted, you must escape (prefix) them with an additional '%'. valuedict = { "interface": "eth0", "address": "192.168.1.5", "mask": "255.255.255.0", "gateway": "192.168.1.1" } template = """\ # /etc/conf.d/net config_%(interface)s=( "%(address)s netmask %(mask)s" ) routes_%(interface)s=( "default via %(gateway)s" ) """ print template % valuedict ... prints ... # /etc/conf.d/net config_eth0=( "192.168.1.5 netmask 255.255.255.0" ) routes_eth0=( "default via 192.168.1.1" ) HTH, Marty _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor