[Tutor] Re: Comparing lines in two files, writing result into a third

pan@uchicago.edu pan@uchicago.edu
Wed Apr 23 15:05:02 2003


> I've tried various combinations of opening the files and 'if' nests, but I
> can't seem to get it right.  Any hints on what structure to use.  Thanks in
> advance.


Try this:

----------------------------------------------

f1=open('c:/py/digest/f1.txt', 'r')
f2=open('c:/py/digest/f2.txt', 'r')
f3=open('c:/py/digest/f3.txt', 'w')

a= [x.strip() for x in f1.readlines()] # a = ['1','3','4']
b= [x.strip() for x in f2.readlines()] # b = ['1','2','3','4','5']

c= [(((x in a) and (x+'*\n')) or (x+'\n')) for x in b]
f3.writelines(c)

f1.close()
f2.close()
f3.close()

----------------------------------------------

The main part is:

[(((x in a) and (x+'*\n')) or (x+'\n')) for x in b]
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

in which (((x in a) and (x+'*\n')) or (x+'\n')) is equivilant to:

       if x in a:
        return x + '*\n'
       else:
        return x + '\n'

if let it be f(x), then it becomes:

c= [f(x) for x in b]

Note:

 The example I show here doesn't take the following situation into
consideration:

f1: 1,3,4,6     <==== 
f2: 1,2,3,4,5

'6' is not in f2, so it is not included in the f3. 

Since this situation is not described in your question, so I will
just leave it this way.


pan