A voir également:
- Chercher chaque valeur d’un fichier 1 das un fichier 2 et afficher les lignes
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
6 réponses
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
21 mars 2021 à 16:33
21 mars 2021 à 16:33
Bonjour,
Tout d'abord sur le forum, pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Pour ton code une observation toute simple,
Tout d'abord sur le forum, pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature, et notamment en Python, la coloration et le respect de l'indentation.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Pour ton code une observation toute simple,
"line" et "l"ce sont des chaines de caractères alors que
line et l, ce sont des noms de variables.
Bonjour,
Merci pour ces indications, et désolé pour le non respect des normes, je corrige cela :
pour les chaines de caractères je l'ai vu, mais je veux chercher le contenu de la variable ,et c'est là que je suis coincé, je ne sais pas comment tester cette variable qui change pour chaque tour de boucle !
Merci pour ces indications, et désolé pour le non respect des normes, je corrige cela :
# -*- coding: utf-8 -*- fichier_analyser = open("../fichier2.txt", "r+") with open("../fichier1.txt", "r") as f: for line in f: for l in fichier_analyser: if "line" in "l": print(l)</code>
pour les chaines de caractères je l'ai vu, mais je veux chercher le contenu de la variable ,et c'est là que je suis coincé, je ne sais pas comment tester cette variable qui change pour chaque tour de boucle !
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
21 mars 2021 à 17:50
21 mars 2021 à 17:50
Pour commencer, il faut bien que tu assimiles la différence entre une variable (et son contenu), et une chaine ....
"line" est une chaine de caractères (en dur) qui contient 4 caractères : l i n e
alors que line dans le code c'est une variable qui va contenir une valeur (dans ton cas issue d'une lecture fichier)
dans ton programme "line" (et "l") n'a pas de sens, avec ses guillemets c'est une chaine, c'est la variable line sans les guillements qui est à utiliser.
réfléchis bien sur cela, il y a 2, 3 trucs qu'il faut que je teste sur ton programme, je reviens après vers toi
"line" est une chaine de caractères (en dur) qui contient 4 caractères : l i n e
alors que line dans le code c'est une variable qui va contenir une valeur (dans ton cas issue d'une lecture fichier)
dans ton programme "line" (et "l") n'a pas de sens, avec ses guillemets c'est une chaine, c'est la variable line sans les guillements qui est à utiliser.
réfléchis bien sur cela, il y a 2, 3 trucs qu'il faut que je teste sur ton programme, je reviens après vers toi
effectivement j'ai fait une bourde :
tu veux dire que je doit mettre les variables:
mais cela ne me renvoi rien ni erreur ni résultat que je veux !!, j'aurai aimé trouver une fonction qui cherche genre: if cette sous chaine dans la chaine alors affiche la chaine , mais je ne trouve pas dans python ou bien je cherche mal
tu veux dire que je doit mettre les variables:
# -*- coding: utf-8 -*- fichier_analyser = open("../fichier2.txt", "r+") with open("../fichier1.txt", "r") as f: for line in f: for l in fichier_analyser: if line in l: print(l)
mais cela ne me renvoi rien ni erreur ni résultat que je veux !!, j'aurai aimé trouver une fonction qui cherche genre: if cette sous chaine dans la chaine alors affiche la chaine , mais je ne trouve pas dans python ou bien je cherche mal
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
Modifié le 21 mars 2021 à 19:11
Modifié le 21 mars 2021 à 19:11
là on travaille sur les variables :-)
je vois plusieurs raisons à tes soucis
1/ la boucle l sur f2 ne va s’exécuter qu'une fois sur le 1er enregistrement de f1, car une fois le pointeur de lecture du fichier arrivé en fin, il ne redémarre pas au début, il faudrait à chaque fois fermer et ouvrir le fichier f2, ou plutôt charger les lignes de f2 au départ dans une liste
2/ tu travailles sur un fichier texte, et quand on lit la ligne, on récupère le caractère de fin de ligne \n, donc quand tu testes la comparaison c'est
voir ce code pour comprendre le point 1 (quand un programme ne fonctionne pas correctement il faut faire du debug, notamment des print parfois après chaque ligne pour voir le contenu des variables et où le programme passe) et corriger le point 2
je vois plusieurs raisons à tes soucis
1/ la boucle l sur f2 ne va s’exécuter qu'une fois sur le 1er enregistrement de f1, car une fois le pointeur de lecture du fichier arrivé en fin, il ne redémarre pas au début, il faudrait à chaque fois fermer et ouvrir le fichier f2, ou plutôt charger les lignes de f2 au départ dans une liste
2/ tu travailles sur un fichier texte, et quand on lit la ligne, on récupère le caractère de fin de ligne \n, donc quand tu testes la comparaison c'est
if "6271815\n" in "6271815 , Alexendre Legrand\n"==> NON, il faut donc à un moment donné, lecture ou comparaison, supprimer ce \n au moins dans line
voir ce code pour comprendre le point 1 (quand un programme ne fonctionne pas correctement il faut faire du debug, notamment des print parfois après chaque ligne pour voir le contenu des variables et où le programme passe) et corriger le point 2
fichier_analyser = open("../fichier2.txt", "r+") with open("../fichier1.txt", "r") as f: for line in f: print("f1", line) for l in fichier_analyser: print("f2", l) if line.rstrip('\n') in l: print('ok *******',l)
Ben
>
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
22 mars 2021 à 04:44
22 mars 2021 à 04:44
Encore un grand merci pour ton aide jee pee,
J'ai cherché et je suis arrivé avec cette solution mais c'est des ensemble et je ne peux pas tester chaque élément mais plutôt tout un ensemble :
je crois que je tourne au rond !!
J'ai cherché et je suis arrivé avec cette solution mais c'est des ensemble et je ne peux pas tester chaque élément mais plutôt tout un ensemble :
# -*- coding: utf-8 -*- with open("./fichier1.txt", "r+") as src_fd: src_lines = src_fd.readlines() with open("./fichier2.txt", "r+") as analysed_fd: analysed_lines = analysed_fd.readlines() matches = set(src_lines).intersection(analysed_lines) print("===============") for chaqueElement in matches: print(chaqueElement.strip()+"\n")
je crois que je tourne au rond !!
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
>
Ben
22 mars 2021 à 07:41
22 mars 2021 à 07:41
il ne faut pas tout chambouler, .intersection() si on cherche ce que cela fait, va rechercher les lignes identiques, pas qui contiennent une partie des caractères
si tu restes sur ta logique de départ tu peux faire
si tu restes sur ta logique de départ tu peux faire
# -*- coding: utf-8 -*- with open("./fichier1.txt", "r+") as src_fd: src_lines = src_fd.readlines() with open("./fichier2.txt", "r+") as analysed_fd: analysed_lines = analysed_fd.readlines() for l1 in src_lines: for l2 in analysed_lines: if l1.rstrip('\n') in l2: print(l1,l2)
Ben
>
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
22 mars 2021 à 18:25
22 mars 2021 à 18:25
Ah t'as raison , j'étais mélangé car ma boucle ne passais pas à l'élément suivant,alors qu'il falait tester sur le \n :( , merci pour l'astuce jee pee :);
Par contre quand j'affiche l2, cela me renvois les ligne matchées mais aussi tout le contenu du f2 , alors que je veux juste les lignes matchés !
Par contre quand j'affiche l2, cela me renvois les ligne matchées mais aussi tout le contenu du f2 , alors que je veux juste les lignes matchés !
with open("./fichier2.txt", "r+") as src_fd: src_lines = src_fd.readlines() with open("./fichier1.txt", "r+") as analysed_fd: analysed_lines = analysed_fd.readlines() for l1 in src_lines: for l2 in analysed_lines: if l1.rstrip('\n') in l2: print(l2) print("--------- OK --------- ")
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
>
Ben
Modifié le 22 mars 2021 à 18:31
Modifié le 22 mars 2021 à 18:31
c'est normal l2 contient toute la ligne, si tu veux le code, ou le nom il faut utiliser une fonction comme .spilt(), pour découper la ligne en plusieurs champs sur la virgule
sourcePresence3.tx contient :
6271815
1426282
1111111
9726262
5251161
2222222
3333333
4444444
Alayser.txt ceci :
6271815 , Alexendre Legrand
1426282 , Phillipe Dumas
9726262 , Albert Einstein
5251161, Nicolas Tesla
1627286, Ben Aflek
1522772, Richard Jean
1272828, Céline Dion
6271815
1426282
1111111
9726262
5251161
2222222
3333333
4444444
Alayser.txt ceci :
6271815 , Alexendre Legrand
1426282 , Phillipe Dumas
9726262 , Albert Einstein
5251161, Nicolas Tesla
1627286, Ben Aflek
1522772, Richard Jean
1272828, Céline Dion
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
25 mars 2021 à 10:38
25 mars 2021 à 10:38
Tu as 2 boucles imbriquées, tu ne peux pas, dans la boucle l2 savoir si l1 est trouvé,
tu ne peux le savoir qu'en fin d'analyse d'une occurrence l1, il faut alors par exemple gérer un drapeau qui va signaler qu'une concordance a été trouvée en l2
tu ne peux le savoir qu'en fin d'analyse d'une occurrence l1, il faut alors par exemple gérer un drapeau qui va signaler qu'une concordance a été trouvée en l2
with open("./sourcePresence3.txt", "r+") as src_fd: src_lines = src_fd.readlines() with open("./analyser.txt", "r+") as analysed_fd: analysed_lines = analysed_fd.readlines() print("DEBUT D'ANALYSE") for l1 in src_lines: print ('l1 =',l1.rstrip('\n'),end='') trouve = False for l2 in analysed_lines: if (l1.rstrip('\n') in l2) : print(l2.split(',')[1].rstrip('\n'),"--------- OK --------- ") trouve = True if not trouve: print("--------- NOT EXIST --------- ")
Merci pour l'astuce,
j'ai appris beaucoup de choses avec vous Jee Pee , un grand merci pour les explications ainsi que votre disponibilité , j'aimerai apprendre plus la programmation python ainsi PowerShell et Bash , vous n'auriez pas des sites , Forums bien structurés pour me former plus ?
j'ai appris beaucoup de choses avec vous Jee Pee , un grand merci pour les explications ainsi que votre disponibilité , j'aimerai apprendre plus la programmation python ainsi PowerShell et Bash , vous n'auriez pas des sites , Forums bien structurés pour me former plus ?
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
9 438
26 mars 2021 à 22:45
26 mars 2021 à 22:45
je n'ai pas de site particulier à te proposer, moi même il faudra un jour que je la suive cette formation python ;-)
je ne suis pas dans la même situation que toi, informaticien expérimenté, je sais ce que je recherche, même dans un langage que je connais peu.
je ne suis pas dans la même situation que toi, informaticien expérimenté, je sais ce que je recherche, même dans un langage que je connais peu.
Ben
>
jee pee
Messages postés
40504
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
30 novembre 2024
27 mars 2021 à 02:46
27 mars 2021 à 02:46
Il faut que je travaille beaucoup afin d’atteindre votre niveau d’expérience, merci pour tout et il se peut qu’on va se parler ???? sur ce site vue que je suis débutant et je veux apprendre.:)