[Tutor] Comparing lines in two files, writing result into a t hird file

Scott Widney SWidney@ci.las-vegas.nv.us
Wed Apr 23 19:19:02 2003


> ...  So, I'm trying to learn as I go, but I gotta produce stuff
> fairly quickly and I don't have a lot of spare time to spend on
> my learning curve.  I do like Python though, and I'm glad I have
> something to use it for.
> 
> So, anyway, now that I think about it a little bit, perhaps sorted
> order doesn't really matter.  One responder suggested that I use
> dictionaries in my code structure.  My understanding is that
> dictionaries are mappings, not sequences, so I guess ordering is
> not really relevant here.  FWIW, It does turn out that the files
> I'm working with are always ordered sequentially when I get them.
> 
> Concerning dictionaries, do you think dictionaries is the structure 
> to use ? If so, I'll try to spend some time reading up on
> dictionaries.  I do remember having problems reading a file into a
> dictionary when I tried it a year ago or so.

Since you're pressed for time, I can give you a basic script using a
dictionary....

#####
d = {} # Start with an empty dictionary

f1 = file('file1.txt', 'r')
for num in f1.readlines():
    num = num.strip()       # get rid of any nasty newlines
    d[num] = 1              # and populate
f1.close()

f2 = file('file2.txt', 'r')
for num in f2.readlines():
    num = num.strip()                # again with the newlines
    if d.has_key(num): d[num] += 1   # <- increment value, or
    else: d[num] = 1                 # <- create a new key
f2.close()

nums = d.keys()
nums.sort()
f3 = file('file3.txt', 'w')
for num in nums:
    f3.write(num)          # Here we put the
    if d[num] > 1:         # newlines back, either
        f3.write("*\n")    # <- with
    else:                  # or
        f3.write("\n")     # <- without
f3.close()                 # the asterisk
####

Should be fairly quick. And it's certainly easier to flash-parse with the
naked eye than a value-packed list comprehension.

HTH
Scott