Mots en commun entre 10 fichiers .txt
Résolu
CarlosMedina
-
jee pee Messages postés 41520 Date d'inscription Statut Modérateur Dernière intervention -
jee pee Messages postés 41520 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je suis pas programmeur Python et j'aimerais avoir de l'aide pour un petit script.
Voila, j'ai 10 fichiers .txt dans un même répertoire et j'aimerais trouver les mots en commun entre ces 10 fichiers.
J'ai trouvé un code sur youtube mais ça ne marche que pour 2 fichiers
le code que j'ai modifié, moche je l'admet ;)
Je suis pas programmeur Python et j'aimerais avoir de l'aide pour un petit script.
Voila, j'ai 10 fichiers .txt dans un même répertoire et j'aimerais trouver les mots en commun entre ces 10 fichiers.
J'ai trouvé un code sur youtube mais ça ne marche que pour 2 fichiers
le code que j'ai modifié, moche je l'admet ;)
f1 = open("1.txt", 'r') f2 = open("2.txt", 'r') f3 = open("3.txt", 'r') f4 = open("4.txt", 'r') f5 = open("5.txt", 'r') f6 = open("6.txt", 'r') f7 = open("7.txt", 'r') f8 = open("8.txt", 'r') f9 = open("9.txt", 'r') f10 = open("10.txt", 'r') content1 = f1.read() content2 = f2.read() content3 = f3.read() content4 = f4.read() content5 = f5.read() content6 = f6.read() content7 = f7.read() content8 = f8.read() content9 = f9.read() content10 = f10.read() liste1 = content1.split() liste2 = content1.split() liste3 = content1.split() liste4 = content1.split() liste5 = content1.split() liste6 = content1.split() liste7 = content1.split() liste8 = content1.split() liste9 = content1.split() liste10 = content1.split() f1.close() f2.close() f3.close() f4.close() f5.close() f6.close() f7.close() f8.close() f9.close() f10.close() listeMotsCommuns=[] for mot in liste1: if mot in liste2 and mot not in listeMotsCommuns: listeMotsCommuns.append(mot) print(listeMotsCommuns)
A voir également:
- Rechercher un mot dans plusieurs fichiers txt
- Comment réduire la taille d'un fichier - Guide
- Trousseau mot de passe iphone - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Comment ouvrir un fichier epub ? - Guide
- Rechercher ou entrer l'adresse - Guide
6 réponses
Grand Grand Grand Merci M3NSONG3 pour ton aide, ta spontanéité et ta patience.
Ça marche parfaitement.
Ça marche parfaitement.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peux-tu préciser "python" quand tu utilises les balises de code?
avant de programmer, je suggère que tu réfléchisses à quelle méthode tu choisis d'utiliser pour résoudre ce problème.
décris-nous cette méthode.
peux-tu préciser "python" quand tu utilises les balises de code?
avant de programmer, je suggère que tu réfléchisses à quelle méthode tu choisis d'utiliser pour résoudre ce problème.
décris-nous cette méthode.
Salut,
1- Je prends le premier mot de 1.txt [ liste1 = content1.split() ]
2- je teste s'il existe dans 2.txt [ liste2 = content2.split() ]
3- si oui, est-il déjà dans la listeMotsCommuns=[] sinon je le rajoute
4- je vais en 1- en passant au 2eme mot
5- fin de fichier 2.txt je passe à 3.txt (ainsi de suite jusqu'à 10.txt)
6- j'écris ma listeMotsCommuns=[] dans fichier output.txt
1- Je prends le premier mot de 1.txt [ liste1 = content1.split() ]
2- je teste s'il existe dans 2.txt [ liste2 = content2.split() ]
3- si oui, est-il déjà dans la listeMotsCommuns=[] sinon je le rajoute
4- je vais en 1- en passant au 2eme mot
5- fin de fichier 2.txt je passe à 3.txt (ainsi de suite jusqu'à 10.txt)
6- j'écris ma listeMotsCommuns=[] dans fichier output.txt
Bonjour,
Ton programme fonctionne bien avec en dur 2 fichiers.
Avec 10 il faut comparer :
liste1 à liste2 à 10
liste2 à liste3 à 10
..
liste9 à liste10
On voit alors qu'il faut 2 boucles imbriquées. Et pour ne pas avoir à traiter des noms de liste en dur, il semble que charger les données initiales dans une liste 2D pourrait se prêter à la génération des 2 boucles.
Cette liste 2D serait du genre listeMot=
ps : j'ai changé ta balise code en code python dans la question
Ton programme fonctionne bien avec en dur 2 fichiers.
Avec 10 il faut comparer :
liste1 à liste2 à 10
liste2 à liste3 à 10
..
liste9 à liste10
On voit alors qu'il faut 2 boucles imbriquées. Et pour ne pas avoir à traiter des noms de liste en dur, il semble que charger les données initiales dans une liste 2D pourrait se prêter à la génération des 2 boucles.
Cette liste 2D serait du genre listeMot=
[['11111', 'AZZZ'], ['22222', 'aaaaa', 'bbbbb', 'cccc'], ['3333', 'TFTFT', 'aaaaa', 'DDDD', 'EEEE'], ['444444444', 'FFFFFFFFFFFF', 'PP', 'zzz'], ['55555', 'VVVVVVVV', 'RRRRR'], ['66666', 'BBB', 'JJJ', 'KKK', 'DDDD', 'EEE'], ['777', 'UUUU', 'I', 'III', 'O'], ['8888', 'OOOOO', 'PP', 'LLLLL', 'EEE'], ['999999', 'aaa', 'bbbb', 'ccc', 'DDDD', 'EEE', 'aaaaa', 'bbbbb', 'cccc', 'KLKLKL'], ['KLKLKL', 'FTFT', 'TFTFT', '100000000', 'FFFFFFFFFFFF']]
ps : j'ai changé ta balise code en code python dans la question
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ok... Bon si on résume.
tu dois lire le contenu de chaque fichier... et enregistrer chaque mot dans une liste. Ensuite tu dois trouver les mots présents dans ces 10 mêmes listes. Bon bah y'a plus qu'à faire ça :
Bon courage pour la suite ;) Si besoin je continue de suivre le sujet si tu ne comprends pas mon code...
(Common est une liste avec les mots en commun de tous les fichiers 1.txt, 2.txt [...] 10.txt)
tu dois lire le contenu de chaque fichier... et enregistrer chaque mot dans une liste. Ensuite tu dois trouver les mots présents dans ces 10 mêmes listes. Bon bah y'a plus qu'à faire ça :
files_content = [] # On lit chaque fichiers : for i in range(1, 11): with open(f"{i}.txt", "r") as file: files_content.append(file.read().split()) common = set.intersection(*map(set,files_content))
Bon courage pour la suite ;) Si besoin je continue de suivre le sujet si tu ne comprends pas mon code...
(Common est une liste avec les mots en commun de tous les fichiers 1.txt, 2.txt [...] 10.txt)
Elle est bien séparée du reste par des espaces ? J'ai compris qu'on cherchait des mots (donc séparés par des espaces ou des sauts de ligne).
J'ai beau essayé de mettre ta chaine dans tous les sens dans mes fichiers testes... Cela marche.
Peux-tu me montrer comment tu as implémenter mon code et me montrer les fichiers que tu essayes de lire pour voir un peu la structure qu'ils ont ? (Au moins un extrait représentatif)
J'ai beau essayé de mettre ta chaine dans tous les sens dans mes fichiers testes... Cela marche.
Peux-tu me montrer comment tu as implémenter mon code et me montrer les fichiers que tu essayes de lire pour voir un peu la structure qu'ils ont ? (Au moins un extrait représentatif)
L'un de mes textes:
Comment j'ai implémenté votre code:
accueil
accueil>
accès
afin
agence
ancestraux.
ancien
anciennes
années
ans
appartenant
architecture
aristocrates
articles
aspects
atmosphère
attestent
au
authentiques
autour
avec
bien
boutique-hôtel
catalogue
ce
central
ces
cette
chacune
chambres
chambres:
charme
chic
ci-dessous
comment
confidentialité
constituent
constituer
contacter
contacts
correspondant
célèbres
cœur
dans
datent
de
demeures
depuis
derrière
des
design
dix-sept
donc
découvrir
désormais
développement
d’hotes
d’hôtels
d’hôtes
d’immobilier
d’investissement
d’un
d’une
el
email:
emblématique
en
encore
enthousiasme
envoûtante
essaouira
est
et
exceptionnel
exploité
exploré
exquis
face
faire
fait
figurent
fr
genre
gsm:
haut
havres
historique.
hôtel
ils
immobilier
immobilière
immobilière
immédiat
jardin
jardins
jemaa
la
labyrinthe
le
les
lieux
luxe
luxueuses
luxuriant
légendaires
l’un
l’époque
m
m2
magiques
magnifique
magnifiques
maison
marché.
mode
m²
médina
navigation
ne
non
notre
nous
occupants
opportunités
organisées
où
page
paix
palais
par
pas
passion
patio
patriciennes
place
plus
pour
probablement
propos
propriété
propriétés
proximité
présentant
quatre
qui
qu’ils
raffinée
raisons
rare
ravis
recevoir
recherche
restauré
rouge
ruelles
référence
rénovation
rénover
rénover
rénové
rénovées
rénovés
résidentiel
sa
savoir-faire
service
ses
site
sites
soigneusement
soin
sol
sold
sommes
son
sont
spectaculaire
succès
suites
suivante
superbe
sur
séduit
sélection
sélectionnées
traditionnelle
trépidante.
témoignages
témoins
un
une
unique
vaste
vastes
vendre
vendre
vente
veuillez
vie
vieille
villas
ville
vingt-six
votre
vous
véhicules
zzzzzzzzzzz6
à
élément
érigée
étroites
été
être
Comment j'ai implémenté votre code:
f1 = open("1.txt", 'r') f2 = open("2.txt", 'r') f3 = open("3.txt", 'r') f4 = open("4.txt", 'r') f5 = open("5.txt", 'r') f6 = open("6.txt", 'r') f7 = open("7.txt", 'r') f8 = open("8.txt", 'r') f9 = open("9.txt", 'r') f10 = open("10.txt", 'r') content1 = f1.read() content2 = f2.read() content3 = f3.read() content4 = f4.read() content5 = f5.read() content6 = f6.read() content7 = f7.read() content8 = f8.read() content9 = f9.read() content10 = f10.read() liste1 = content1.split() liste2 = content1.split() liste3 = content1.split() liste4 = content1.split() liste5 = content1.split() liste6 = content1.split() liste7 = content1.split() liste8 = content1.split() liste9 = content1.split() liste10 = content1.split() f1.close() f2.close() f3.close() f4.close() f5.close() f6.close() f7.close() f8.close() f9.close() f10.close() files_content = [] # On lit chaque fichiers : for i in range(1, 11): with open(f"{i}.txt", "r") as file: files_content.append(file.read().split()) common = set.intersection(*map(set,files_content)) print (common)
Pour le coup, le contenu avant mon code ne sert pas à grand chose...
Juste mon code suffira !
Par contre je ne comprends pas... J'ai beau testé avec ton fichier et en refaire des autres de la même façons, de mon côté ça marche très bien...
Essaye peut-être d'ouvrir les fichiers en utf-8 en modifiant cette ligne :
Faire un fichier comme celui-ci suffira pour ce que tu veux faire, ton code d'avant n'est pas utile :
Juste mon code suffira !
Par contre je ne comprends pas... J'ai beau testé avec ton fichier et en refaire des autres de la même façons, de mon côté ça marche très bien...
Essaye peut-être d'ouvrir les fichiers en utf-8 en modifiant cette ligne :
with open(f"{i}.txt", "r", encoding="utf-8") as file:
Faire un fichier comme celui-ci suffira pour ce que tu veux faire, ton code d'avant n'est pas utile :
#!/usr/bin/env python files_content = [] for i in range(1, 4): with open(f"{i}.txt", "r", encoding="utf-8") as file: files_content.append(file.read().split()) common = set.intersection(*map(set, files_content)) print(common)