Conseil pour comparer le nombre de mots de deux fichiers texte (débutant) [Résolu]

Signaler
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020
-
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020
-
Bonjour tout le monde,

Je cherche à comparer deux fichiers texte. J'aimerai, que pour chaque ligne de mes fichiers texte, puisse être comparé le nombre de mots. Mais je ne sais pas vraiment vers quel "outil" me diriger je m'y perds un peu entre les différents modules (expressions régulières, le Natural language toolkit) etc. Je viens de voir également que les listes pourraient m'être utiles. J'ai l'ouvrage de Swinnen pour m'aider mais je sais pas trop où chercher. Pour l'instant, j'arrive à compter le nombre de mots de tout mon fichier texte mais pas de chaque lignes. Voici le code :

f = open("a.txt", "r")
f2 = open ("b.txt", "r")
text1 = f.readlines()

number_of_words = 0
for line in text1:

line = line.strip("\n")

words = line.split()
number_of_words += len(words)
f.close()
print("words:", number_of_words)

text2 = f2.readlines()


Des idées ? Merci d'avance :)

4 réponses

Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748
bonjour, quel résultat veux-tu précisément obtenir?
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748
avant tout, utilise les balises de code quand tu postes du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748 >
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020

je suppose que tu n'as pas essayé de faire un exemple correct, où les comparaisons correspondent au contenu des fichiers?
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020
>
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020

Oui je pense que ça serait mieux étant donné que mon texte est long ? (je retourne ta question en question haha) Avec un "with" par exemple ? J'ai bricolé ça mais bon le bidouillage en programmation....

with open("a.txt", "r") as f1, open("b.txt", "r") as f2:
    lines = f.readlines().split("\n") 
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020
>
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020

Oui j'ai donné un exemple au hasard. Bon du coup ça a fonctionné en enlevant le split. Mais est-ce que c'est bien ce que tu avait proposé de faire ?
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748 >
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020

pas du tout, je proposais d'utiliser readline dans une boucle.
with open("a.txt", "r") as f1, open("b.txt", "r") as f2:
    while True:
        l1=f1.readline()
        l2 = f2.readline()
        if not l1 and not l2:
            break
        n1=len(l1.split())
        n2=len(l2.split())
        print (n1,n2)
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020
>
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020

Merci beaucoup ça fonctionne ;)
Messages postés
653
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
27 novembre 2020
79
Bonjour assange337,

Déjà, il faut compter les mots par ligne, et non pas les additionner tous :

f = open("a.txt", "r")

text1 = f.readlines()

number_of_words = {}
n=0
for line in text1:
	line = line.strip("\n")
	words = line.split()
	number_of_words[n] = len(words)
	n+= 1
f.close()

for k in range (n):
	print("words line {:d} : {:d}".format(k+1,number_of_words[k]))
Messages postés
11
Date d'inscription
mardi 12 mai 2020
Statut
Membre
Dernière intervention
26 mai 2020

Merci c'est pas mal ! Par contre j'ai l'impression que les points d'interrogation sont compris comme des mots
Messages postés
653
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
27 novembre 2020
79
il y a plein de possibilités en fait ...