Copie de fichier, mot à mot, sans doublon

Résolu
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 - Modifié par BunoCS le 11/01/2014 à 21:23
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 - 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

3 réponses

Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
12 janv. 2014 à 21:09
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.


--
1
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
12 janv. 2014 à 22:53
non ça marche pas bien
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
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.
0
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
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
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
Modifié par Mints le 13/01/2014 à 01:18
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()
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
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()
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
Modifié par Mints le 11/01/2014 à 20:23
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()


--
0
Mints Messages postés 69 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 1 juin 2018 7
12 janv. 2014 à 12:55
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()


--
0
nournina Messages postés 52 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 17 juin 2014 1
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
0
Rejoignez-nous