Python cractères!

Résolu/Fermé
koodzy Messages postés 2 Date d'inscription samedi 3 octobre 2020 Statut Membre Dernière intervention 3 octobre 2020 - Modifié le 22 juil. 2021 à 16:43
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 22 juil. 2021 à 16:51
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

koodzy Messages postés 2 Date d'inscription samedi 3 octobre 2020 Statut Membre Dernière intervention 3 octobre 2020
3 oct. 2020 à 12:15
et il faut un dictionnaire...
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 3 oct. 2020 à 16:39
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
combien de lignes dans ton fichier ???
0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
Modifié le 22 juil. 2021 à 16:52
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