J'essaie de faire un programme simple qui peut trouver la fréquence des occurrences dans un fichier texte ligne par ligne. Je l'ai tout correctement, sauf lorsque plus d'un mot est sur une ligne dans le fichier texte. (Plus d'informations ci-dessous)
Le fichier texte ressemble à ceci:
file = open("test.txt", "r") text = file.read() #reads file (I've tried .realine() & .readlines() word_list = text.split(None) word_freq = {} # Declares empty dictionary for word in word_list: word_freq[word] = word_freq.get(word, 0) + 1 keys = sorted(word_freq.keys()) for word in keys: final=word.capitalize() print(final + ': ' + str(word_freq[word])) # Line that prints the output
Je veux que la sortie soit: (ne doit pas être dans le même ordre)
Day: 2 Good: 3 Hello: 2 Hi: 2 Night: 1
Ce qu'il produit actuellement:
Hello: 2 Hi: 2 Good Day: 2 Good Night: 2
Mon code:
Hello Hi Hello Good Day Hi Good Day Good Night
4 Réponses :
Vous souhaitez conserver les lignes. Ne vous divisez pas. Ne capitalisez pas. Ne triez pas
Utilisez un compteur
from collections import Counter c = Counter() with open('test.txt') as f: for line in f: c[line.rstrip()] += 1 for k, v in c.items(): print('{}: {}'.format(k, v))
Y a-t-il un moyen sans modules?
Sûr. Mais est-ce une exigence? Vous devriez mettre à jour la question pour le dire
oui, comment pourrais-je afficher la sortie souhaitée comme indiqué ci-dessus
Ma réponse le fait déjà. As-tu essayé? Counter fait partie de la bibliothèque standard. Je n'installe aucun module
Je veux dire que je ne veux rien importer. donc sans importer Counter
Votre question n'indiquait pas que c'était une exigence. Je réponds juste à ce que tu voulais. Si c'est votre devoir, vous devez modifier la question pour clarifier cela
Vous pouvez vous faciliter la tâche en utilisant un objet Counter. Si vous souhaitez compter les occurrences de lignes complètes, vous pouvez simplement faire:
counter_dict = {} with open('file.txt') as f: l = f.readlines() for line in l: if line not in counter_dict: counter_dict[line] = 0 counter_dict[line] +=1 print(counter_dict)
Puisque vous avez demandé un moyen sans modules:
from collections import Counter with open('file.txt') as f: c = Counter(f) print(c)
Et pas de modules?
Un objet fichier est itérable. Vous ne devriez pas avoir besoin de readlines dans le premier exemple
Au lieu de diviser le texte par Aucun, divisez-le par chaque saut de ligne afin d'obtenir chaque ligne dans une liste.
file = open("test.txt", "r") text = file.read() #reads file (I've tried .realine() & .readlines() word_list = text.split('\n') word_freq = {} # Declares empty dictionary for word in word_list: word_freq[word] = word_freq.get(word, 0) + 1 keys = sorted(word_freq.keys()) for word in keys: final=word.capitalize() print(final + ': ' + str(word_freq[word])) # Line that prints the output
Merci à tous pour les réponses, la plupart du code produit la sortie souhaitée de différentes manières. Le code que j'ai fini par utiliser sans module était le suivant:
from collections import Counter c = Counter() with open('live.txt') as f: for line in f: c[line.rstrip()] += 1 for k, v in c.items(): print('{}: {}'.format(k, v))
Le code que j'ai fini par utiliser avec les modules était le suivant:
file = open("test.txt", "r") text = file.read() #reads file (I've tried .realine() & .readlines() word_list = text.split('\n') word_freq = {} # Declares empty dictionary for word in word_list: word_freq[word] = word_freq.get(word, 0) + 1 keys = sorted(word_freq.keys()) for word in keys: final=word.capitalize() print(final + ': ' + str(word_freq[word])) # Line that prints the output
Comment savez-vous que
Good day
est un mot et non deux? Si vous divisez votre texte en fonction d'espaces blancs, vous considérerez cela comme 2 mots ...C'est ce que je demande
Alors ne vous séparez pas ...
Ensuite, vous devez diviser votre texte en fonction du caractère
\n
et non des espaces ... si votre texte contient toujours un caractère\n
après chaque mot ....