sorting a file

Hachey mark.hachey at gmail.com
Sat Jun 14 23:33:24 CEST 2008


On Jun 14, 12:00 pm, jim-on-linux <inq1... at inqvista.com> wrote:
> On Saturday 14 June 2008 03:15, Beema
>
> shafreen wrote:
> > Hi all,
>
> > I have a file with three columns  i need
> > to sort the file with respect to the third
> > column. How do I do it uisng python. I
> > used Linux command to do this. Sort but i
> > not able to do it ? can any body ssuggest
> > me
>
> I have used this method to solve similar
> problems.
>
> This is a consept of how to do what you want,
> but you will have to work a little to get it
> right.
>
> You might try something like this;
>
> Dict = {}  ##create a dictionary
>
> make a list of all column3 values
>
> for loop colum3 values
>
> Make these values the key in a dictionary
> If the values are long, you can use the first
> 7 to 15 characters if you want.
>
> use this key to equal all the values in the
> other columns on the same row.
>
> Dict[column3] = column1, column2, column3
>
> once the dictionary is made
>
> get the dictionary key
> x = Dict.keys()  ## get the keys from Dict
>
> x.sort()  # produce a sorted list of keys of
> column3
>
> Loop these sorted keys to extract from the
> dictionary the values related to each
>
> jim-on-linux
> http://:inqvista.com


Here's another way to attack it. Make a class that takes your columns
as arguments. define an operator on that class to get the comparison
you want. make a list that is your rows, and call sort. here's an
example using only two columns

class twoColumns :
    def __init__(self, c1 = 0, c2 = 0) :
        self.c1 = c1
        self.c2 = c2

    #just use this for debugging if you want to see everything
    def getVals(self):
        print self.c1, self.c2

    #order members of this class by the second column
    def __lt__(c,d):
        if (c.c2 < d.c2) :
            return 1
        else :
            return 0

#end class definition

Here's what happened when I used this class.

>>> r1 = twoColumns(3,4)
>>> r2 = twoColumns(1,5)
>>> test = [r1,r2]  #this is already sorted
>>> test[0].getVals()
3 4
>>> test[1].getVals()
1 5
>>> test.sort() #and the sort looks the same
>>> test[0].getVals()
3 4
>>> test[1].getVals()
1 5
>>> test = [r2,r1]  #I reversed the rows
>>> test[0].getVals()
1 5
>>> test[1].getVals()
3 4
>>> test.sort()  #and we get what we want
>>> test[0].getVals()
3 4
>>> test[1].getVals()
1 5

I think that does what you're asking.



More information about the Python-list mailing list