[Tutor] Looping + Variables
Martin Walsh
mwalsh at groktech.org
Mon Oct 22 04:47:12 CEST 2007
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
More information about the Tutor
mailing list