Python cractères!

Résolu
koodzy Messages postés 2 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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. koodzy Messages postés 2 Statut Membre
     
    et il faut un dictionnaire...
    0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ...
    0
  3. flopython78
     
    combien de lignes dans ton fichier ???
    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
    0