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 :

Compter seulement les lignes avec des mots [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Compter seulement les lignes avec des mots
    Bonjour ou bonsoir selon l'heure à laquelle vous lirez mon message .

    Je débute en Python, et malgré qu'il y ait une communauté assez puissante qui me permette de répondre à mes questions par le biais des problématiques d'autres personnes, je reste aujourd'hui bloquée sur un problème.

    En effet, j'ai écrit un programme qui me permet de compter le nombre moyen de caractères dans un fichier.txt ainsi que le nombre de lignes. Mais malheureusement, ce dernier me compte également les lignes "vides" (par exemple si à la fin d'une phrase j'ai décidé de retourner à la ligne mais sans rien écrire alors il le comptera comme telle).

    Si des personnes s'y connaissent en Python, pourriez-vous me dire quel type code dois-je utiliser pour éviter de compter ces lignes vides ?

    Voici mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    import re
     
    from collections import Counter
     
    f = open("vie.txt")
     
    words = re.findall("[a-zA-Z_]+", (f).read())
     
    average = sum(len(word) for word in words)/len(words)
     
    num_lines = sum(1 for line in (f).read())
     
    print("Le nombre de caractère moyen par mot est : %s" % average)
     
    print ("Le nombre de ligne est de : %s" %num_lines)
     
    f.close()

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Pas la peine de lire le fichier deux fois.

    Tu peux séparer les mots d'une ligne avec split(' ') les ponctuations seront comptées mais tu évites de perdre les caractères accentués, ce qui est le cas avec ta regex.

    Pour éliminer les lignes vides utilise strip() qui supprimera le retour ligne forcément existant et ta ligne sera réellement vide.

    Un truc comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    count = 0
    words = 0
    lines = 0
     
    with open("thread_doc", "r") as inf:
        for line in inf:
            line = line.strip()
            if line:
                line = line.split()
                lines += 1
                words += len(line)
                count += sum(len(w) for w in line)
     
    print("Lignes: %s" % lines)
    print("Moyenne: %s" % (count / words))

  3. #3
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Révision sujet
    Bonjour,

    Tout d'abord merci de votre réponse !

    Je viens de tester et effectivement vous avez raison cela ne me compte pas les mots avec accent.

    Mon premier exercice était de prendre en compte le nombre de mots dans un texte et je suis partie de cette base pour continuer mes exercices.

    J'ai lu que je pouvais utiliser le type "str" ? Mais puis-je l'utiliser sans forcément "détruire" tout mon code ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Comme ton code faisait la moyenne de lettres des mots j'ai repris ce compte dans mon exemple.

    Si il s'agit de la moyenne des mots par phrase c'est plus simple mais ce n'est pas ce que faisait ton code.

    Le type str définit toute chaîne de texte. Les lignes de ton fichier sont déjà des str.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Janvier 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2017
    Messages : 5
    Par défaut Révison 2.0
    Pardon je n'ai pas précisé mais mon code doit effectivement compter le nombre de caractère moyen par mot.

    C'est bien ce que faisait mon code ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par Megz' Voir le message
    Pardon je n'ai pas précisé mais mon code doit effectivement compter le nombre de caractère moyen par mot.

    C'est bien ce que faisait mon code ?
    Ouaip !

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 11/02/2015, 10h37
  2. Réponses: 2
    Dernier message: 01/07/2014, 17h14
  3. [WD-2003] le contraire de sauter une ligne avec des mots
    Par jessicaz dans le forum VBA Word
    Réponses: 21
    Dernier message: 28/04/2009, 08h50
  4. Les regex avec des mots composés
    Par Halex78 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/07/2008, 00h26

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