[Tutor] Multiple regex replacements, lists and for.
Will Geary
artists00nly at gmail.com
Tue Oct 12 00:39:11 CEST 2010
Hello all,
I'm new to python and inexperienced in programming but I'm trying hard.
I have a shell script that I'm converting over to python.
Part of the script replaces some lines of text.
I can do this in python, and get the output I want, but so far only using sed.
Here's an example script:
import subprocess, re
list = ['Apples the color red', 'Sky i am the blue color', 'Grass the
colour green is here', 'Sky i am the blue color']
def oldway():
sed_replacements = """
s/\(^\w*\).*red/\\1:RED/
s/\(^\w*\).*blue.*/\\1:BLUE/"""
sed = subprocess.Popen(['sed', sed_replacements],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
data = sed.communicate("\n".join(list))[:-1]
for x in data:
print x
oldway();
""" This produces:
>>>Apples:RED
>>>Sky:BLUE
>>>Grass the colour green is here
>>>Sky:BLUE
Which is what I want"""
print "---------------"
def withoutsed():
replacements = [
(r'.*red', 'RED'),
(r'.*blue.*', 'BLUE')]
for z in list:
for x,y in replacements:
if re.match(x, z):
print re.sub(x,y,z)
break
else:
print z
withoutsed();
""" Produces:
>>>RED
>>>Sky i am the blue color
>>>BLUE
>>>Grass the colour green is here
>>>Grass the colour green is here
>>>Sky i am the blue color
>>>BLUE
Duplicate printing + other mess = I went wrong"""
I understand that it's doing what I tell it to, and that my for and if
statements are wrong.
What I want to do is replace matching lines and print them, and also
print the non-matching lines.
Can somebody please point me in the right direction?
Any other python pointers or help much appreciated,
Will.
More information about the Tutor
mailing list