[Tutor] Log file for Nested if-elif
Steven D'Aprano
steve at pearwood.info
Wed Jan 2 23:16:45 EST 2019
On Wed, Jan 02, 2019 at 08:39:53PM +0530, Asad wrote:
> Hi All ,
>
> Need advice on the following piece of code :
Let me write it in a more "Pythonic" style:
PATCH = r'\?/patch/\d{8}/\d{8}/admin/load.sql'
APPLY = r'Starting\s+apply\s+for\s+patch\s+\d{8}/\d{8}'
ERROR = r'set_metadata'
tail = deque(maxlen=8) # the last eight lines
script = None
with open("file1.log", 'r') as f:
for line in f:
tail.append(line)
if (re.search(PATCH, line, re.IGNORECASE)
or re.search(APPLY, line, re.IGNORECASE):
script = line
elif re.search(ERROR, line, re.IGNORECASE):
print "Reason for error \n", line
print "Script:", script
print "Tail:\n", tail
print " Danger " # Seriously? This is dangerous?
break
> Now this is printing the last cached line in the variable line . However
> I would like to see the following output :
>
> 1) if it matches the pattern: \?/patch/\d{8}/\d{8}/admin/load.sql then
> look for the line "set_metadata" in the file1.log if it finds the pattern
> then print the line which matches the pattern
> \?/patch/\d{8}/\d{8}/admin/load.sql
Where are you looking? *Anywhere* in the log file? Only in the
immediate next line? Anywhere forward of the "patch" line? You are
looking for two patterns, but does the order they appear, or the
distance apart, matter?
blah blah blah set_metadata blah blah
... 100 lines ...
blah blah blah /patch/ ... admin/load.sql
... 100 lines ...
Is that a match?
> print last 4 lines of the tail array and exit
print tail[-4:]
sys.exit()
> 2) if it doesnot match '\?/patch/\d{8}/\d{8}/admin/load.sql'
>
> then look of the anothern pattern
> :Starting\s+apply\s+for\s+patch\s+\d{8}/\d{8} if it find the pattern
>
> then look for line "set_metadata" in the file1.log if it finds the pattern
> then print the line which matches the pattern
> \?/patch/\d{8}/\d{8}/admin/load.sql
This is a contradiction: you just said that it DOESN'T match the
patch...load.sql pattern, but now you want it to print the line that
matched. There is no line that matches!
> 3 ) if it doesnot match the pattern: \?/patch/\d{8}/\d{8}/admin/load.sql
> or '\?/patch/\d{8}/\d{8}/admin/load.sql'
>
> print "No match found refer to install guide"
>
> Can you advice what I can do to change the code .
You need to tighten the specifications to make it more clear what you
are trying to do.
--
Steve
More information about the Tutor
mailing list