IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Trier un fichier à l'aide d'une liste. [Python 3.X]


Sujet :

Python

  1. #21
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 172
    Par défaut
    Bonjour,

    Au stade actuel de mes connaissances, la question qui suit n'a pas trop d'importance. Mais par curiosité, je me demande tout de même si trier les lignes d'un très gros fichier texte en passant par une liste est une méthode acceptable. Les listes peuvent t'elles contenir une grosse quantité de données ?
    Comme cela a déjà été expliqué ça dépendra de la RAM, cependant il y a des moyens de limiter le nombre de données dans une liste en lisant par partie dans le fichier.

    En gros le plan serait

    Diviser les données en morceaux triables en mémoire

    1. Lisez une partie du fichier qui tient en mémoire.
    2. Triez cette partie en utilisant un algorithme de tri standard.
    3. Écrivez la partie triée dans un fichier temporaire.
    4. Répétez les étapes 1 à 3 jusqu'à ce que toute la donnée soit traitée.

    Fusionner les morceaux triés

    1. Ouvrez tous les fichiers temporaires triés (les morceaux).
    2. Utilisez un algorithme de fusion pour combiner ces morceaux en un seul ensemble ordonné.
    3. Pendant la fusion, écrivez la sortie dans un nouveau fichier.



    En utilisant le module heapq et sa méthode merge, ça se fait très efficacement pour le tri final.

    Il y a pas mal de solutions avant d'utiliser le marteau pour écraser une mouche, le tout est de tester et vérifier que les temps sont raisonnables tout en considérant que raisonnables est suivi de critères précis pour le définir.

  2. #22
    Membre confirmé Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Par défaut
    J'ai réfléchi un bon moment à l'algorithme que tu me présente, ce serait un super exercice pour moi de le transformer en script.

    Mais c'est le tri final qui m'intrigue :

    fichier=(a,x,f,b,z,y,u,i,s,q,p,m,r,e,c,e,d,f,k,e,o)

    Diviser les données en morceaux ...
    fichier1=(a,x,f,b,z,y,u)
    fichier2=(i,s,q,p,m,r,)
    fichier3=(e,c,e,d,f,k,e,o)

    ... triables en mémoire
    fichier1=(a,b,f,u,x,y,z)
    fichier2=(i,m,p,q,r,s)
    fichier3=(c,d,e,e,f,k,o)

    Fusionner les morceaux triés
    La méthode merge va être capable de lire en même temps plusieurs fichiers pour extraire les éléments dans le bon ordre ?

    a dans le fichier1
    b dans le fichier1
    c dans le fichier3
    d dans le fichier3
    e dans le fichier3
    e dans le fichier3
    f dans le fichier3
    i dans le fichier2
    ...

  3. #23
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 859
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par scalpel Voir le message
    Mais c'est le tri final qui m'intrigue :
    Tri fusion: https://fr.wikipedia.org/wiki/Tri_fusion
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #24
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    Citation Envoyé par scalpel Voir le message
    La méthode merge va être capable de lire en même temps plusieurs fichiers pour extraire les éléments dans le bon ordre ?
    oops, il s'agit de "tri de fusion"

    Je ne comprends pas la question car ici c'est le plus facile, il suffit de lire chaque fichier a la suite et d'écrire dans un unique
    Et pour l'"ordre", c'était un de tes anciens sujets ici par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range(ord("a"), ord("z")):
        c = chr(i)
        #print(i, c)
        with open(f"fichier.{c}.partiel") as fin:   # voir read/write tout le fichier en une passe
            for line in fin:
                # fout.write(line)
    ps: cet "ordre" a déjà été écrit dans ton code lorsque tu as découpé le fichier initial (dans cet exemple, 24 découpes), il te suffit de réutiliser le même (une fonction ou statique)

  5. #25
    Membre confirmé Avatar de scalpel
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Novembre 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2008
    Messages : 157
    Par défaut
    Merci, il me manquait cette observation.

    Le principe de l'algorithme de tri fusion repose sur cette observation : le plus petit élément de la liste à construire est soit le plus petit élément de la première liste, soit le plus petit élément de la deuxième liste.
    Je comprends mieux l'intérêt de découper le gros fichier en plusieurs plus petits fichiers triés.

  6. #26
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 172
    Par défaut
    Citation Envoyé par scalpel
    J'ai réfléchi un bon moment à l'algorithme que tu me présente, ce serait un super exercice pour moi de le transformer en script.
    Tu as tous les éléments pour le faire je pense et utiliser de nouveaux modules comme heapq par ex. donne une expérience pratique intéressante...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/08/2006, 16h19
  2. Réponses: 2
    Dernier message: 07/08/2006, 11h51
  3. Réponses: 1
    Dernier message: 06/06/2006, 14h54
  4. [.NET]réécriture d'un fichier a partir d'une list box
    Par scorpking dans le forum VC++ .NET
    Réponses: 14
    Dernier message: 24/04/2006, 14h16
  5. Sélectionner un fichier à partir d'une liste filtrée
    Par Lenaick dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/03/2006, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo