pattern block expression matching
Dan Sommers
dan at tombstonezero.net
Sat Jul 21 14:40:13 EDT 2018
On Sat, 21 Jul 2018 17:37:00 +0100, MRAB wrote:
> On 2018-07-21 15:20, aldi.kraja at gmail.com wrote:
>> Hi,
>> I have a long text, which tells me which files from a database were downloaded and which ones failed. The pattern is as follows (at the end of this post). Wrote a tiny program, but still is raw. I want to find term "ERROR" and go 5 lines above and get the name with suffix XPT, in this first case DRXIFF_F.XPT, but it changes in other cases to some other name with suffix XPT. Thanks, Aldi
>>
>> # reading errors from a file txt
>> import re
>> with open('nohup.out', 'r') as fh:
>> lines = fh.readlines()
>> for line in lines:
>> m1 = re.search("XPT", line)
>> m2 = re.search('ERROR', line)
>> if m1:
>> print(line)
>> if m2:
>> print(line)
>>
> Firstly, you don't need regex for something has simple has checking for
> the presence of a string.
>
> Secondly, I think it's 4 lines above, not 5.
>
> 'enumerate' comes in useful here:
>
> with open('nohup.out', 'r') as fh:
> lines = fh.readlines()
> for i, line in enumerate(lines):
> if 'ERROR' in line:
> print(line)
> print(lines[i - 4])
Where's awk when you need it?
import fileinput
for line in fileinput.fileinput('nohump.out'):
if 'XPT' in line:
line_containing_filename = line
if 'ERROR' in line:
print(line_containing_filename)
I think Aldi's original approach is pretty good.
More information about the Python-list
mailing list