Programmation.python : Tri multi-clés et multi-sens

Posté par cho7 (page perso, ) le 30 juin 2008
0

Bonsoir tout le monde,



il y a quelques temps j'avais rédigé ma propre bibliothèque de tri car je trouvais les autres un peu trop compliquées pour ce que je voulais en faire. Ma bibliothèque m'a rendu de fiers services, sauf que désormais elle peine un peu car j'en ai besoin pour de super gros fichiers, et elle n'a pas été concu pour (en fait, le support gros fichier était prévu, mais je n'ai jamais terminé, car j'me suis dis que ca ne me servirait jamais)



Désormais quand je vois l'ignoble code de ma librairie, je me dis que ca ne sert plus à grand chose de la maintenir, donc je me tourne vers vous pour m'aiguiller sur ce que je recherche :)



L'idée est simple, actuellement si je veux trier un fichier tri.txt contenant :

AAAA0001ZZZZ

AAAA0002ZZZZ

BBBB0001ZZZZ

AAAA0001ZZZX



Avec comme critères 1ère colonne croissante, 2eme colonne décroissante, 3eme colonne croissante, je fais :

>>> import mksort

>>> pouet = mksort.FlatFile("tri.txt")

>>> pouet.addkey(0,4)

>>> pouet.addkey(4,8,mksort.DESC)

>>> pouet.addkey(8,12)

>>> pouet.sort()

>>> for val in pouet: print val[:-1]

...

AAAA0002ZZZZ

AAAA0001ZZZX

AAAA0001ZZZZ

BBBB0001ZZZZ

>>> pouet.write() #on écrase le fichier original, ou en précisant en paramètre le nom du nouveau fichier



Avec un fichier csv, c'est un peu pareil, sauf que cette fois ci ce n'est plus des plages de caractères, mais des numéros de colonne :



>>> import mksort

>>> plouf = mksort.CsvFile("tri.txt",";")

>>> plouf.addkey(1)

>>> plouf.addkey(2,mksort.DESC)

>>> plouf.addkey(3)

>>> plouf.sort()

>>> for val in plouf: print val[:-1]

...

AAAA;0002;ZZZZ

AAAA;0001;ZZZX

AAAA;0001;ZZZZ

BBBB;0001;ZZZZ





Bref, ca marche aussi avec des données directement issues d'un tableau (à ce moment là j'utilise les classes FlatTab ou CsvTab), pour ce que j'en faisais c'était nickel.



Voilà, désormais mon beau joujou se vautre sur de gros fichiers, et c'est trop relou de modifier mon bidule là tout de suite maintenant (je tri mon tableau en n passes, avec n = nombre de clés définies, donc en mode split/sort/merge, mon algo foireux ne tient pas du tout la route)



Si quelqu'un a des solutions faciles à implémenter voir toutes faites, je suis preneur.



Au passage, je donne à la communauté ma merveilleuse librairie, qui convient parfaitement pour les petites besognes (et même de taille honorable, pour peu que l'on ne soit pas à la dixième de seconde près ;)



http://fuck.the.world.free.fr/mksort/





Merci !

> Lire le message (4 commentaires, moyenne: 1,5).  

Vous avez demandé le commentaire #945750.

msort ?

Posté par karteum59 () le 30/06/2008 à 20:44. (lien). Évalué à 2.

http://billposer.org/Software/msort.html

[ Répondre ]

  • [^]Re: msort ?

    Posté par cho7 (page perso, ) le 30/06/2008 à 21:20. (lien). Évalué à 1.

    J'aurai du me relire et constater que c'était pas clair ce que je demandais !

    Je voulais en effet des solutions *en python*, afin de les mélanger à d'autres bouts de code en python.

    Sinon, ton programme a l'air très sympa (en dehors du fait qu'il ne réponde pas précisément à mes besoins), il a vraiment l'air de tout gérer :)

    --
    le python, c'est bon

    [ Répondre ]

    • [^]Re: msort ?

      Posté par cho7 (page perso, ) le 30/06/2008 à 21:22. (lien). Évalué à 1.

      bon ok, j'ai rien dit, msort a l'air d'être écrit en python :)

      je reformule donc mes besoins : une librairie python sympa à utiliser pour faire du tri multi-clés simplement

      j'vais y arriver :+)

      --
      le python, c'est bon

      [ Répondre ]