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 :

trie list par les derniere lettre


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut trie list par les derniere lettre
    [Débutant](pyton: 2.7)
    windows XP
    -----------------------

    Donc le but est de d'écrire dans une nouvelle list,les mot qui on les 3 derniere lettre choisie.

    Copier sur la nouvelle list , seulement les mot qui finisse en "ent".

    Pour l'instant elle ne fait que tout recopier integralement la liste.

    Si vous avez une idée de solution

    Merci

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def copywords_endswith(oldfile, newfile, finals):
        with open(oldfile, "r") as f:
            lwords = f.readlines()
     
            with open(newfile, "w") as g:
                for word in lwords:
                    if word.endswith(finals[:-2][:0]): #sans les "[:-2][:0]" elle ne fait rien du tout.
     
                        g.write(word)
                        #print("WRITE", g)
     
    copywords_endswith("testtxt2.txt","Textrow.txt","ent")
    Exemple de ma liste(elle contient plusieur centaine de mot)

    a
    à
    abaissa
    abaissable
    abaissables
    abaissai
    abaissaient
    abaissais
    abaissait
    abaissâmes
    abaissant
    abaissante
    abaissantes
    abaissants
    abaissas
    abaissasse
    abaissassent
    abaissasses
    abaissassiez
    abaissassions
    abaissât
    abaissâtes
    abaisse
    abaissé
    abaissée
    abaissées
    abaisse-langue
    abaissement
    abaissements
    abaissent
    abaisser

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonsoir,


    Tuyau: il existe en Python un moyen d’afficher: avec print


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    finals = 'ent'
    print 'AAA'+finals[:-2][:0]+'ZZZ'
    Résultat:


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    a premiere vue, je ne voie pas le but du code que tu donne....a part d'afficher en console une liste de 10 AAAZZZ
    ------

    je part d'un fichier texte qui contient une liste de mots.

    je garde ceux qui finissent en "ent"

    j'écrit dans un autre fichier texte le résultat du trie.

  4. #4
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonsoir,

    Avant de travailler avec des fichiers vérifie sur écran par des "print" que ton code fonctionne...

    Un peu de lecture sur le slicing :

    http://docs.python.org/tutorial/introduction.html

    Strings can be subscripted (indexed); like in C, the first character of a string has subscript (index) 0. There is no separate character type; a character is simply a string of size one. Like in Icon, substrings can be specified with the slice notation: two indices separated by a colon.
    Slice indices have useful defaults; an omitted first index defaults to zero, an omitted second index defaults to the size of the string being sliced.
    et
    Indices may be negative numbers, to start counting from the right.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    print sert à afficher quelque chose pour le voir
    Mais comment fait on quand ce qu’on veut voir ne donne rien à voir ?
    On le met en sandwich entre deux trucs qu’on voit.

    Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    finals = 'ent'
    print 'AAA'+finals[:-2][:0]+'ZZZ'
    affiche
    c’est que finals[:-2][:0] est une chaîne de longueur zéro.
    Donc tes slicings [:-2][:0] réduisent à néant ce qui au départ est une chaîne de 3 caractères.




    Tu peux appliquer cette révélation de la soirée (Python dispose de print pour afficher) à lwords aussi, ce devrait t’être instructif.

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [x for x in liste if x[-3:]=='ent']
    Tyrtamos

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 069
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [x for x in liste if x[-3:]=='ent']
    Tyrtamos
    j'ai pas testé, mais j'ai un doute vu l'allure du fichier ...
    a
    à
    abaissa
    abaissable
    abaissables
    abaissai
    abaissaient
    abaissais
    abaissait
    abaissâmes
    abaissant
    ...

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 069
    Par défaut
    le print c'est pour te montrer que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if word.endswith(finals[:-2][:0]):
    ça ne veut rien dire.

    une piste ... '\n'. Et oui, c'est soirée énigmes
    dir() et __doc__ sont tes amis.

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 069
    Par défaut
    non ...
    là tu devrais trouver
    ton code avec une ligne en plus: print lwords
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def copywords_endswith(oldfile, newfile, finals):
        with open(oldfile, "r") as f:
            lwords = f.readlines()
            print lwords
            with open(newfile, "w") as g:
                for word in lwords:
                    if word.endswith(finals):
     
                        g.write(word)
                        #print("WRITE", g)
     
    copywords_endswith("testtxt2.txt","Textrow.txt","ent")
    ça saute aux yeux.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Par défaut
    Perfect
    Je tournais autour et pas juste un peu..pff

    Merci a tous, tourné de biere virtuel et d'arachide salée.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def copywords_endswith(oldfile, newfile, finals):
        with open(oldfile, "r") as f:
            lwords = f.readlines()
     
            with open(newfile, "w") as g:
                for word in lwords:
                    if word.endswith(finals + "\n"):
                        g.write(word)
     
    copywords_endswith("testtxt.txt","Textrow.txt","me")

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Salut !

    Au lieu de rajouter '\n' au pattern recherché, il vaut mieux faire appel à la méthode strip.

    1. Ca supprimera tous les caractères d'espace en début et fin de ligne (le retour à la ligne en fait partie) => ça évitera d'éventuels soucis si jamais il y a un ou plusieurs espaces sur une ou plusieurs lignes du fichier;
    2. Le fait de rajouter '\n' au pattern implique que l'algo ne pourra marcher que sur des mots qui ont ce caractère en fin de chaîne => ça restreint fortement l'utilité et c'est une mauvaise approche que d'adapter son algo au format des données d'entrée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Recherche par les 1° lettres
    Par bbcharly dans le forum IHM
    Réponses: 12
    Dernier message: 27/03/2013, 20h09
  2. probleme les liste par les mots
    Par bourry dans le forum Prolog
    Réponses: 1
    Dernier message: 05/01/2010, 11h47
  3. [AC-2007] Alimenter une Liste par les valeurs d'une ligne
    Par curt dans le forum IHM
    Réponses: 11
    Dernier message: 19/04/2009, 12h00
  4. Réponses: 3
    Dernier message: 17/08/2006, 16h49
  5. choisir ds une liste charge une autre liste par les bons elements
    Par kamaldev dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2006, 10h06

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