URL: https://linuxfr.org/forums/programmation-python/posts/tri-multi-cl%C3%A9s-et-multi-sens Title: Tri multi-clés et multi-sens Authors: cho7 Date: 2008年06月30日T22:26:32+02:00 Tags: Score: 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/](http://fuck.the.world.free.fr/mksort/) Merci !