Copie de fichier, mot à mot, sans doublon [Résolu]

nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 11 janv. 2014 à 13:11 - Dernière réponse : Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention
- 13 janv. 2014 à 11:25
Bonjour,
je veut faire un petit programme consiste à copié uniquement les mots se trouvant dans le fichier 1 dans le fichier 2 sans pour autant copié les mot répéter.
merci
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - 12 janv. 2014 à 21:09
1
Merci
Utilise le 2ème code il correspond plus à ton problème:

Ce code permet de copier une occurrence unique de mots ou d'ensembles de mots inscrits les uns en dessous des autres dans un fichier 1 vers un fichier 2 à la condition que ceux-ci ne soient pas déjà présents dans le fichier 2.


--

Merci Mints 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - 12 janv. 2014 à 23:13
Il y a peut-être un problème de casse (majuscule/minuscule) le mieux ce serait d'écrire ici un extrait ou un exemple de tes 2 fichiers.
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 12 janv. 2014 à 23:27
le premier fichier contient presque des centaines de mots et le 2ème sera vide je doit transférer les mot du premier fichier de sorte qu' un seul mot ne doit jamais répéter 2 fois dans le deuxième fichier c'est pour éviter la répétition
Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - 13 janv. 2014 à 00:57
Ok voila qui devrait fonctionner :

# -*- coding: cp1252 -*-

listeMotsFichier1 = [] #<- liste contenant tous les mots analysés ligne par ligne dans le fichier 1
motCourant = None  # <- le mot courant analysé

fichier1 = open('liste1.txt','r')
while 1:
    motCourant = fichier1.readline()
    if motCourant == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
        break
    # si le mot courant a déjà été analysé
    if motCourant in listeMotsFichier1:
        # on le zappe et on continue la progression
        print motCourant[:-1],' : mot déjà enregistré dans fichier 2 ...' # motListe[:-1] -> le mot sans le caractère retour chariot(\n) à la fin 
        continue
    # sinon on l'enregidtre dans le fichier 2        
    else:
        print motCourant[:-1],' : mot non présent dans fichier 2  -> enregistré...'
        listeMotsFichier1.append(motCourant) # on l'ajoute dans la liste des mots analysés
        fichier2 = open('liste2.txt','a') # si le fichier n'existe pas il sera créé
        fichier2.write(motCourant)
        fichier2.close()
fichier1.close()
Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - 13 janv. 2014 à 01:19
Mais si tu veux mettre à jour ton fichier 2 à partir de noms rajoutés au ficher 1 plus tard, utilise alors ce code qui marche dans tous les cas :

# -*- coding: cp1252 -*-

#1 - on met tous les mots du fichier 2 dans une liste
liste2 = []
try:
    fichier2 = open('liste2.txt','r')
    motListe2 = None
    while 1:
        motListe2 = fichier2.readline() # on lit chaque ligne du fichier
        if motListe2 == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
            break
        liste2.append(motListe2)    # sinon on ajoute le mot à la liste 
    fichier2.close()
except :
    pass

#2 - on analyse tous les mots du fichier 1, ligne par ligne
motListe1 = None
fichier1 = open('liste1.txt','r')
while 1:
    motListe1 = fichier1.readline()
    if motListe1 == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
        break
    # lorsque l'un d'entre eux est présent dans la liste contenant les mots du fichier 2
    if motListe1 in liste2:
        # on le zappe et on continue la progression
        print motListe1[:-1],' : mot déjà présent dans la liste2...' # motListe[:-1] -> le mot sans le caractère retour chariot(\n) à la fin 
        continue
    # sinon on l'enregidtre dans le fichier 2        
    else:
        print motListe1[:-1],' : mot non présent dans liste2 -> enregistré...'
        liste2.append(motListe1) # on l'ajoute dans la liste 2 pour ne pas le réenregistrer si il est en doublon dans la liste 1
        fichier2 = open('liste2.txt','a')
        fichier2.write(motListe1)
        fichier2.close()
fichier1.close()
Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - 13 janv. 2014 à 11:25
Et normalement ce dernier code marche aussi dans le cas d'une mise à jour ou d'un premier lancement :
# -*- coding: cp1252 -*-

#1 - si le fichier 2 existe, on met toutes ses lignes dans une liste
listeFichier2 = []
try:
    fichier2 = open('liste2.txt','r')
    for ligne in fichier2:
        listeFichier2.append(ligne.rstrip('\n')) #<- on retire le caractère retour chariot '\n' de chaque ligne et on l'ajoute à la liste 
    fichier2.close()
except :
    pass

#2 - on analyse tous les mots du fichier 1, ligne par ligne
try:
    fichier1 = open('liste1.txt','r')
    for ligne in fichier1:
        motFichier1 = ligne.rstrip('\n') 
        if motFichier1 in listeFichier2: # <- si le mot est présent dans la liste des mots du fichier 2, on le passe
            continue
        listeFichier2.append(motFichier1) # sinon, on l'ajoute dans la liste 2 pour ne pas le réenregistrer si il est en doublon dans la liste 1
        fichier2 = open('liste2.txt','a') 
        fichier2.write(motFichier1+'\n') # et on l'enregistre dans fichier 2 
        fichier2.close()    
    fichier1.close()
except:
    print 'fichier 1 non trouvé....'
Commenter la réponse de Mints
Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - Modifié par Mints le 11/01/2014 à 20:23
0
Merci
Bonjour,

si j'ai bien compris ton problème, il y a un moyen de le résoudre :
# -*- coding: cp1252 -*-

#1 - on met tous les mots du fichier 2 dans une liste
fichier2 = open('liste2.txt','r') 
liste2 = []
motListe2 = None
while 1:
    motListe2 = fichier2.readline() # on lit chaque ligne du fichier
    if motListe2 == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
        break
    liste2.append(motListe2)    # sinon on ajoute le mot à la liste 
fichier2.close()

#2 - on analyse tous les mots du fichier 1, ligne par ligne
motListe1 = None
fichier1 = open('liste1.txt','r')
while 1:
    motListe1 = fichier1.readline()
    if motListe1 == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
        break
    # lorsque l'un d'entre eux est présent dans la liste contenant les mots du fichier 2
    if motListe1 in liste2:
        # on le zappe et on continue la progression
        print motListe1[:-1],' : mot déjà présent dans la liste2...' # motListe[:-1] -> le mot sans le caractère retour chariot(\n) à la fin 
        continue
    # sinon on l'enregidtre dans le fichier 2        
    else:
        print motListe1[:-1],' : mot non présent dans liste2 -> enregistré...' 
        fichier2 = open('liste2.txt','a')
        fichier2.write(motListe1)
        fichier2.close()
fichier1.close()


--
Commenter la réponse de Mints
Mints 70 Messages postés mercredi 1 novembre 2000Date d'inscription 1 juin 2018 Dernière intervention - 12 janv. 2014 à 12:55
0
Merci
Et si les mots sont en doublon dans le fichier 1 :

# -*- coding: cp1252 -*-

#1 - on met tous les mots du fichier 2 dans une liste
fichier2 = open('liste2.txt','r')
liste2 = []
motListe2 = None
while 1:
    motListe2 = fichier2.readline() # on lit chaque ligne du fichier
    if motListe2 == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
        break
    liste2.append(motListe2)    # sinon on ajoute le mot à la liste 
fichier2.close()

#2 - on analyse tous les mots du fichier 1, ligne par ligne
motListe1 = None
fichier1 = open('liste1.txt','r')
while 1:
    motListe1 = fichier1.readline()
    if motListe1 == '':  # quand on tombe sur une ligne vide on stop la lecture (fin de fichier)
        break
    # lorsque l'un d'entre eux est présent dans la liste contenant les mots du fichier 2
    if motListe1 in liste2:
        # on le zappe et on continue la progression
        print motListe1[:-1],' : mot déjà présent dans la liste2...' # motListe[:-1] -> le mot sans le caractère retour chariot(\n) à la fin 
        continue
    # sinon on l'enregidtre dans le fichier 2        
    else:
        print motListe1[:-1],' : mot non présent dans liste2 -> enregistré...'
        liste2.append(motListe1) # on l'ajoute dans la liste 2 pour ne pas le réenregistrer si il est en doublon dans la liste 1
        fichier2 = open('liste2.txt','a')
        fichier2.write(motListe1)
        fichier2.close()
fichier1.close()


--
nournina 52 Messages postés dimanche 27 octobre 2013Date d'inscription 17 juin 2014 Dernière intervention - 12 janv. 2014 à 20:39
merci bien mais ce code sert à copier les mots du fichier 1 dans le fichier malgré s'il existe déjà je veut l'instruction qui évite la répétition de mot déjà exister
Commenter la réponse de Mints

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.