Le comte de lettres dans un fichier texte
Je suis un débutant en python programmeur et je suis en train de faire un programme qui compte le nombre de lettres dans un fichier texte. Voici ce que j'ai obtenu jusqu'à présent:
import string
text = open('text.txt')
letters = string.ascii_lowercase
for i in text:
text_lower = i.lower()
text_nospace = text_lower.replace(" ", "")
text_nopunctuation = text_nospace.strip(string.punctuation)
for a in letters:
if a in text_nopunctuation:
num = text_nopunctuation.count(a)
print(a, num)
Si le fichier texte contient hello bob
, je veux la sortie:
b 2
e 1
h 1
l 2
o 2
Mon problème est qu'il ne fonctionne pas correctement lorsque le fichier texte contient plus d'une ligne de texte ou a des signes de ponctuation.
OriginalL'auteur user2752551 | 2013-09-05
Vous devez vous connecter pour publier un commentaire.
C'est très lisible pour accomplir ce que vous souhaitez à l'aide de Compteur:
Vous pouvez itérer la résultante dict imprimer dans le format que vous souhaitez.
line.lower()
.vous êtes en droit de grâce, il fixe.
OriginalL'auteur elyase
Vous devez utiliser
collections.Counter
Il imprime:
Votre
text
variable doit être:Pour obtenir les résultats que vous avez besoin de:
Dans mon exemple, il imprime:
Pour plus d'informations Les compteurs de doc
OriginalL'auteur moliware
À l'aide de re:
Il est beaucoup plus élégant et propre, avec Compteur néanmoins.
Une chose est sûre. Juste de l'utiliser: avec open('file.txt', 'r') as fichier: context = fichier.lire() Vous avez probablement couru dans python célèbre rendement itérateur.
OriginalL'auteur
OriginalL'auteur no1
Juste par souci d'exhaustivité, si vous voulez le faire sans l'aide de
Counter
, voici une autre très courte distance, à l'aide de la liste de la compréhension et de ladict
builtin:f.read()
va lire le contenu du fichier en entier dans letext
variable (peut-être une mauvaise idée, si le fichier est très volumineux); ensuite, nous utilisons une compréhension de liste pour créer une liste de tuples(letter, count in text)
et de convertir cette liste de tuples d'un dictionnaire. Avec Python 2.7+ vous pouvez également utiliser{l: text.count(l) for l in letters}
, ce qui est encore plus court et un peu plus lisible.Noter, cependant, que cette recherche dans le texte plusieurs fois, une fois pour chaque lettre, alors que les
Counter
scans qu'une seule fois et met à jour le compte de toutes les lettres d'un seul coup.OriginalL'auteur tobias_k
Vous pourrait diviser le problème en deux tâches plus simples:
OriginalL'auteur jfs
Encore une autre façon:
Il sorties les symboles les plus fréquents pour le moins.
Le caractère de comptage de la boucle est O(1) de la complexité et peut gérer de manière arbitraire des fichiers volumineux car il lit le fichier dans
read_chunk_size
morceaux.OriginalL'auteur Maxim Egorushkin
OriginalL'auteur Public Person