Question on sorting

Eddie Corns eddie at holyrood.ed.ac.uk
Tue Nov 30 09:52:50 EST 2004


wes weston <wweston at att.net> writes:

>Lad wrote:
>> Hi,
>> I have a file of records of 4 fields each.
>> Each field is separated by a semicolon. That is
>> 
>> Filed1;Ffield2;Field3;Field4
>> 
>> But there may be also empty records such as
>> ;;;;
>> (only semicolons).
>> 
>> For sorting I used
>> #################
>> lines = file('Config.txt').readlines()# a file I want to sort
>> lines.sort()
>> ff=open('ConfigSorted.txt','w')# sorted file
>> ff.writelines(lines)
>> ff.close()
>> ###############
>> It was sorted but empty records were first. I need them to be last(at
>> the end of the file). How can I do that?
>> 
>> Thanks for help
>> Lad

>Lad,
>    The sort call can have a function name as an arg. You
>could do:

>def mycompare(s1,s2):
>#return -1 to put s1's at front; 1 to put s1's at back; 0 for a tie
>#if s1==";;;;" and s2<>";;;;": return 1

>lines.sort(mycompare)

I can't help feeling that the OP might have really wanted to be sorting on
individual fields rather than whole lines.  In which case I would think of
doing a line.split(';') on each line before sorting.  It would still need
either to use a function to make empty fields go later or alternatively use
DSU (google!) and convert '' to say '~' and back again. This also solves the
problem of what to expect when only some of the fields are blank rather than
all of them.

Eddie




More information about the Python-list mailing list