Python cractères!

Résolu
Bonjour,

Je suis bloqué : je dois compter le nombre de a, de b, de c, etc... dans un fichier texte. Malheureusement, la fonction
count
ne marche pas. Pouvez-vous m'aider ?

Voilà ou j'en suis:

with open('jules.txt','r') as texte:
    contenu = texte.read()
   
    dico = {}    
for lettre in contenu:
    dico[(lettre)]=texte.count()
    
    
texte.close

4 réponses

  1. Bonjour,

    C'est bien le nombre de 'lettre' dans 'contenu' que tu veux

    donc pourquoi écris tu texte.count() ?

    texte n'est que l'identifiant du fichier jules.txt en ouverture ...
    1. Modérateur
      Bonjour,

      Beaucoup de choses ne vont pas dans ton programme.
      • Si le fichier n'est pas ouvert avec succès, le programme plantera. Si tu rattrapes cette exception, tu verras que
        dico
        n'est pas déclaré au bon niveau.
      • Le mot clé
        with
        est conçu pour fermer le file descriptor (que tu as appelé
        texte
        , mais qui n'est pas du texte) à la sortie du bloc. Il ne faut pas le fermer explicitement, sinon il sera fermé deux fois.
      • La méthode
        count
        sert à compter combien d'occurrence d'une sous-chaîne apparaissent dans une sous-chaîne. Par exemple,
        "abcabc".count("abc")
        vaut 2. Elle ne répond donc pas à ton problème.
      • Si tu utilises
        count
        pour chaque lettre de l'alphabet, le programme sera très inefficace, puisque la chaîne qui contient l'intégralité du fichier sera relue pour chacun des caractères.


      Bref, voici à quoi ça devrait plutôt ressembler :

      #!/usr/bin/env python3
      
      import sys
      from collections import defaultdict
      from pprint      import pprint
      
      filename = "/etc/motd"
      d = defaultdict(int)
      try:
          with open(filename) as f:
              s = f.read()
              for a in s:
                  d[a] += 1
      except:
          print(f"Can't read {filename}", file=sys.stderr)
      
      pprint(d)


      Bonne chance