harirammano...@gmail.com wrote: > On Thursday, April 21, 2016 at 7:03:00 PM UTC+5:30, Jussi Piitulainen > wrote: >> harirammano...@gmail.com writes: >> >> > On Monday, April 18, 2016 at 12:38:03 PM UTC+5:30, >> > hariram...@gmail.com wrote: >> >> HI All, >> >> >> >> can you help me out in doing below. >> >> >> >> file: >> >> <start> >> >> guava >> >> fruit >> >> <end> >> >> <start> >> >> mango >> >> fruit >> >> <end> >> >> <start> >> >> orange >> >> fruit >> >> <end> >> >> >> >> need to delete from start to end if it contains mango in a file... >> >> >> >> output should be: >> >> >> >> <start> >> >> guava >> >> fruit >> >> <end> >> >> <start> >> >> orange >> >> fruit >> >> <end> >> >> >> >> Thank you >> > >> > any one can guide me ? why xml tree parsing is not working if i have >> > root.tag and root.attrib as mentioned in earlier post... >> >> Assuming the real consists of lines between a start marker and end >> marker, a winning plan is to collect a group of lines, deal with it, and >> move on. >> >> The following code implements something close to the plan. You need to >> adapt it a bit to have your own source of lines and to restore the end >> marker in the output and to account for your real use case and for >> differences in taste and judgment. - The plan is as described above, but >> there are many ways to implement it. >> >> from io import StringIO >> >> text = '''\ >> <start> >> guava >> fruit >> <end> >> <start> >> mango >> fruit >> <end> >> <start> >> orange >> fruit >> <end> >> ''' >> >> def records(source): >> current = [] >> for line in source: >> if line.startswith('<end>'): >> yield current >> current = [] >> else: >> current.append(line) >> >> def hasmango(record): >> return any('mango' in it for it in record) >> >> for record in records(StringIO(text)): >> hasmango(record) or print(*record) > > Hi, > > not working....this is the output i am getting... > > \
This means that the line >> text = '''\ has trailing whitespace in your copy of the script. > <start> > guava > fruit > > <start> > orange > fruit Jussi forgot to add the "<end>..." line to the group. To fix this change the generator to def records(source): current = [] for line in source: current.append(line) if line.startswith('<end>'): yield current current = [] >> hasmango(record) or print(*record) The print(*record) inserts spaces between record entries (i. e. at the beginning of all lines except the first) and adds a trailing newline. You can avoid this by specifying the delimiters explicitly: if not hasmango(record): print(*record, sep="", end="") Even with these changes code still looks somewhat brittle... -- https://mail.python.org/mailman/listinfo/python-list