IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

lire un fichier


Sujet :

Python

  1. #21
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 881
    Par défaut
    J'ai donné une solution, tu l'as regardé et testé ?

  2. #22
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 874
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dedalios Voir le message
    donc sans aller vers les notions fort intéressante de liste et d'appel au objet liste au départ mon souhaite était que l'on m'aide dans l'erreur sur la logique de du code
    Ne penses-tu pas que "doublon" devrait être réinitialisé pour toute nouvelle ligne de fic1 ??? Accessoirement puisqu'il est à "n" par défaut, et qu'on sort de la boucle quand il passe à "o", inutile alors de le remettre à "n" à chaque ligne lue de fic2. On le met à "n" au départ, s'il passe à "o" on sort de la boucle et puis c'est tout.

    PS: il existe la structure "for...else" qui permet de s'affranchir de ce genre de variable.
    Exemple avec variable
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    flag=False
    for x in data:
        if trouve(x):
           flag=True
           break
       # if
    # for
    if flag:
        print "Element trouvé"
    else:
        print "Element pas trouvé"
    # if

    Exemple avec for... else
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for x in data:
        if trouve(x):
           print "Element trouvé"
           break
       # if
    else:
        print "Element pas trouvé"
    # for

    Citation Envoyé par dedalios Voir le message
    il est certain que le temps de traitement est relativement long mais quelle importance?
    L'importance c'est de ne pas avoir de traitements qui durent des minutes alors qu'ils pourraient durer quelques secondes ; de ne pas avoir de traitements qui durent des heures alors qu'ils pourraient durer quelques minutes ; de ne pas avoir de traitements qui durent des jours alors qu'ils pourraient durer quelques heures ; de ne pas avoir de traitements qui durent des années alors qu'ils pourraient durer quelques jours. Si l'équipe de Turing avait pensé comme toi quand ils se sont attaqués à Enigma, la seconde guerre mondiale aurait duré 2 ans de plus.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #23
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 26
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Quelle clé utiliserais-tu pour ton dictionnaire ?
    On peut essayer, en fonction de ce que l'on cherche dans le fichier en question, d'utiliser comme cle du dictionnaire le contenu de la ligne / l'info que l'on cherche.

    dict = { XXX: " " for XXX in notre fichier }

    et ensuite, en lisant le deuxieme fichier, faire un if XXX in dict.

    Beaucoup plus rapide, j'ai teste ca il y a quelques semaines sur des fichiers de 80 millions de lignes avec un resultat tout a fait satisfaisant.

    Passer par des ensembles en utilisant set est aussi une option tres interressante.

  4. #24
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 874
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JacekB Voir le message
    Beaucoup plus rapide, j'ai teste ca il y a quelques semaines sur des fichiers de 80 millions de lignes avec un resultat tout a fait satisfaisant.
    Hum, je fais ici une hypothèse que la rapidité dont tu parles (O(1) déjà cité) soit liée au fait que les clefs sont uniques, chose qu'on n'a pas forcément avec les tuples et les listes.
    Toutefois un dictionnaire est quand-même un objet assez lourd. Il y a par exemple la conversion de clef en indice (parce qu'au bout d'un dico il n'y a au final qu'un bête tableau), la gestion des cas où deux clefs distinctes donnent le même indice, etc.

    Or les set() sont des listes à contenu unique. Donc à mon avis la recherche dans les set() offrira le même avantage en O(1) sans avoir l'inconvénient de la lourdeur d'un dico. Qu'en penses-tu ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #25
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 500
    Billets dans le blog
    1
    Par défaut
    En gros la ligne de ton fichier sert de clé au dico et tu mets n'importe quoi en valeur ? L'idée est tentante pour une recherche grâce à la fonction de hash.

    Svear souleve une possibilité intéressante avec le set. Faudrait tester

  6. #26
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Quid
    j'aimerai comprendre ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for x in data:
        if trouve(x):
           print "Element trouvé"
           break
       # if
    else:
        print "Element pas trouvé"
    # for
    Ou et comme ce définie la variable data....

    Rien ne défini data donc en l'état ce morceau de code me reste difficile a comprendre.

    Pour autant je subodore que si data est une liste cela a du sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    data =['lundi', 'mardi' , 'mercredi', 'jeudi' , 'vendredi', 'samedi', 'dimanche']
     
    for x in data:
        if trouve('mercredi'):
           print "Element mercredi trouvé"
           break
       # if
    else:
        print "Element pas trouvé"
    # for

  7. #27
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut compréhesion
    voici une idee interessant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    a = ["a", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
    b = {"quick", "brown"}
    c = [x for x in a if not x in b]
    print (c)
     # liste a
    a = [ 
          ["d", "e", "f"],
          ["g", "h", "i"],
          ["g", "h", "i"],
          ["x", "y", "z"]
       ]
     
     # liste b
    b = [ ["a", "b", "c"],
          ["a", "b", "c"],
          ["d", "e", "e"],
          ["x", "y", "z"]
       ]
     
    # c permet de comparer sous liste par sous liste  a et b
    # n'est conservé sous liste de a celle absente de b
    c = [x for x in a if not x in b]
    print (c)
    Cette version est presque parfaite sauf que le résultat est sur une seul ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    destination = open("Resultat.csv", "w")
    f1 = open"f1ori.csv", "r") 
    f2 =open("f2.csv", "r") 
     
    try:
        file1_raw = f1.read()
        file2_raw = f1.read()
        file1_words = file1_raw.split()
        file2_words = file2_raw.split()
        result = set(file1_words).difference(set(file2_words))
     
        resutat = [x for x in file1_words if not x in file2_words]
        destination.writelines(resutat)
     
     
    finally:
        destination.close()
        f1.close()
        f2.close()

    j'ai donc modifier le code ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    destination = open("Resultat.csv", "w")
    f1 = open"f1ori.csv", "r") 
    f2 =open("f2.csv", "r") 
     
    try:
        file1_raw = f1.read()
        file2_raw = f1.read()
        file1_words = file1_raw.split()
        file2_words = file2_raw.split()
        result = set(file1_words).difference(set(file2_words))
     
        resutat = [x for x in file1_words if not x in file2_words]
        #destination.writelines(resutat)
        for x in resutat:
            destination.write(x)
            destination.write("\n")
     
    finally:
        destination.close()
        f1.close()
        f2.close()

    exemple de fichier f1ori.csv
    Jacque;frederic;id15;1cc30806;1;az908;TPSB;000000007000;20170201;20171231;2017-01-09 22:56:35.817;20170106;124
    jean;marcle;id33;1aa30406;1;az980;TPSB;0000000070100;20170201;20171231;2017-01-09 22:56:35.817;20170106;122
    maxi;cheril;id13;1bb30406;1;az980;TPSB;0000000070100;20170201;20171231;2017-01-09 22:56:35.817;20170106;122


    Pourquoi le fichier résultat a cette apparence?

    Jacque;frederic;id15;1cc30806;1;az908;TPSB;000000007000;20170201;20171231;2017-01-09
    22:56:35.817;20170106;124
    jean;marcle;id33;1aa30406;1;az980;TPSB;0000000070100;20170201;20171231;2017-01-09
    22:56:35.817;20170106;122
    maxi
    cheril;id13;1bb30406;1;az980;TPSB;0000000070100;20170201;20171231;2017-01-09 22:56:35.817;20170106;122

    Pourquoi ne retrouvons nous pas l'organisation du fichier d'origne
    en quantité donnes et en logique de programme cela me semble plus cohérent , je n'ai pas vérifer le détail des donnees

  8. #28
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 874
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dedalios Voir le message
    Rien ne défini data donc en l'état ce morceau de code me reste difficile a comprendre.
    Il s'agit d'un code minimaliste destiné à illustrer le fonctionnement de la structure for...else. Mais bien entendu il s'adresse à quelqu'un ayant suffisament de bases Python pour comprendre que dans cet exemple, data n'a pas d'importance et que c'est à l'utilisateur de le remplacer par ce qu'il veut (tant que ça reste itérable). Accessoirement il sera nécessaire de définir aussi la fonction "trouve()"...

    Citation Envoyé par dedalios Voir le message
    Pour autant je subodore que si data est une liste cela a du sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    data =['lundi', 'mardi' , 'mercredi', 'jeudi' , 'vendredi', 'samedi', 'dimanche']
     
    for x in data:
        if trouve('mercredi'):
           print "Element mercredi trouvé"
           break
       # if
    else:
        print "Element pas trouvé"
    # for
    Voilà, t'as trouvé. Ca fonctionne aussi si "data" est une chaine, un générateur, bref un truc itérable dans lequel on veut chercher une info précise.

    Citation Envoyé par dedalios Voir le message
    Cette version est presque parfaite sauf que le résultat est sur une seul ligne
    Ben en programmation, c'est aussi à toi de gérer la façon dont tu veux afficher ton résultat
    Es-tu vraiment développeur en informatique ???

    Citation Envoyé par dedalios Voir le message
    Pourquoi le fichier résultat a cette apparence?
    Pourquoi ne retrouvons nous pas l'organisation du fichier d'origne
    Parce que tu as mal découpé tes lignes (va te documenter sur le fonctionnement de la fonction split()).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #29
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut code finale
    Voici le code finale
    sur un version de quelques enregistrements extrait des fichiers cela marche

    sur les fichiers d'origine il ne retourne rien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    destination = open("Resultat2.csv", "w")
     
    f1 = open("F1.csv", "r")
    f2 = open("F2.csv", "r") #lecture global des donnees du fichier
    try:
        file1_raw = f1.read() #lecture global des donnees du fichier
        file2_raw = f2.read()  #lecture global des donnees du fichier
        file1_words = file1_raw.split("\n") # Découpage selon le caractère de fin de ligne
        file2_words = file2_raw.split("\n") # Découpage selon le caractère de fin de ligne
     
        result = set(file1_words).difference(set(file2_words))
     
        resutat = [x for x in file1_words if not x in file2_words]
     
     
        #destination.writelines(resutat)
        for x in resutat:
            destination.write(x)
            destination.write("\n")
     
    finally:
        destination.close()
        f1.close()

  10. #30
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 874
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dedalios Voir le message
    sur les fichiers d'origine il ne retourne rien
    C'est normal. Parce que ta lecture est mauvaise.
    Tu lis un fichier texte (donc un fichier sensé être traité ligne par ligne) mais tu le lis par read(). Mais read() ne lit pas de lignes, il lit des blocs de n octets. Et donc rien ne garantit que les blocs lus se juxtaposeront pile poil sur les lignes du fichier.

    Exemple: si ton fichier contient
    Les sanglots longs des violons de l'automne
    Bercent mon coeur d'une langueur monotone
    (2 lignes)
    Si tu lis via read(), peut-être que tu obtiendras Les sanglots longs des violons de l'automne\nBercent mon c puis ensuite oeur d'une langueur monotone. Et là, ben ton split("\n") marche mais tu n'as que la moitié du second vers.
    Alors traiter un fichier texte en passant par read() et en recollant les morceaux est faisable mais c'est beaucoup d'efforts pour pas grand chose parce que tu as des outils plus adéquats. Tu as par exemple readline() qui te lit ton fichier ligne par ligne (elle te la renvoie sous forme de chaine). Tu as aussi readlines() qui te lit tout ton fichier d'un coup (elle te les renvoie sous forme d'un tableau). Et sinon comme le fichier est lui-même un itérable (la notion d'itérable est omniprésente dans le monde Python), tu peux tout à fait écrire for ligne1 in f1: ... comme tu l'as fait au début.
    J'ai l'impression que tu pars dans tous les sens. alors que ton souci ne vient pas de la façon dont tu lis tes lignes mais de la façon dont tu les exploites. Donc repars de ton code initial et adapte ensuite ton traitement...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #31
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut
    Alors ceci ne doit être mieux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # -*- coding: cp1252 -*-
    destination = open("Resultat2.csv", "w")
    destination2 = open("Resultat3.csv", "w")
     
     
    f1 = open("F1.csv", "r") 
    f2 = open("F2.csv", "r")
     
    try:
        file1 = f1.readlines()               #charger tous le fichier
        file2 = f2.readlines()                #charger tous le fichier
     
        resultat = set(file1).difference(set(file2))
        destination.writelines(resultat)
     
        resultat2 = [x for x in file1 if not x in file2]
        destination2.writelines(resultat2)
     
    finally:
        destination.close()
        destination2.close()
        f1.close()
        f2.close()
    cette solution semble fonctionnelle sur des fichiers de quelque enregistrement.
    mais avec des fichiers de 50.000 lignes etrangements cela ce donne rien?

  12. #32
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Citation Envoyé par dedalios Voir le message
    cette solution semble fonctionnelle sur des fichiers de quelque enregistrement.
    mais avec des fichiers de 50.000 lignes etrangements cela ce donne rien?
    à priori, si çà ne donne rien, c'est que soit le programme plante avant la fin (et il devrait y avoir un message d'erreur), soit qu'il n'y a pas de ligne de f1 qui ne soit pas dans f2...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #33
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 874
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dedalios Voir le message
    mais avec des fichiers de 50.000 lignes etrangements cela ce donne rien?
    Voir la réponse de Wiztricks (j'avais dit aussi la même chose ici).

    Maintenant, tu peux vérifier cette hypothèse par le petit script suivant:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with open("a", "r") as file_base:
    	with open("b", "r") as file_ref: ref=tuple(file_ref)
    	for (i, l) in enumerate(file_base, 1):
    		try:
    			where=ref.index(l) + 1
    		except ValueError:
    			where=None
     
    		print "ligne %s f1 at pos %s dans f2" % (
    			i,
    			where,
    		)
    	# for
    # with
    Au final, tu auras chaque n° de ligne de F1.csv avec sa position dans "f2.csv" (ou bien "None" si la ligne n'y est pas). Et donc si tu n'as aucun "None" ça veut dire que toutes les lignes de F2 sont dans F1 (et tu sauras où)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #34
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut
    PAs de bug


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # -*- coding: cp1252 -*-
    destination = open("Resultat1.csv" , "w")
    destination2 = open("Resultat2.csv" , "w")
     
     
    f1 = open("a", "r") 
    f2 = open("b", "r")
     
    try:
        file1 = f1.readlines()               #charger tous le fichier
        file2 = f2.readlines()                #charger tous le fichier
     
        resultat = set(file1).difference(set(file2))
        destination.writelines(resultat)
     
        resultat2 = [x for x in file1 if not x in file2]
        destination2.writelines(resultat2)
     
    finally:
        destination.close()
        destination2.close()
        f1.close()
        f2.close()
    Quand a ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    with open("a", "r") as file_base:
        with open("b", "r") as file_ref: ref=tuple(file_ref)
        for (i, l) in enumerate(file_base, 1):
            try:
                where=ref.index(l) + 1
            except ValueError:
                where=None
     
            print ("ligne %s f1 at pos %s dans f2" % (
                i,
                where,
            ))
        # for
    # with
    voila le résultat:
    ligne 680 f1 at pos 9694 dans f2
    ligne 681 f1 at pos 9697 dans f2
    ligne 682 f1 at pos 9698 dans f2

    ligne 683 f1 at pos 9713 dans f2
    ligne 684 f1 at pos 9714 dans f2
    ligne 685 f1 at pos 9731 dans f2
    ligne 686 f1 at pos 9732 dans f2
    ligne 687 f1 at pos 9763 dans f2

    ..ligne 3192 f1 at pos 43128 dans f2
    ligne 3193 f1 at pos 43129 dans f2
    ligne 3194 f1 at pos 43130 dans f2
    ligne 3195 f1 at pos 43131 dans f2
    ligne 3196 f1 at pos 43132 dans f2
    ligne 3197 f1 at pos 43133 dans f2
    ligne 3198 f1 at pos 43134 dans f2
    ligne 3199 f1 at pos 43137 dans f2
    ligne 3200 f1 at pos 43138 dans f2

  15. #35
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 874
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dedalios Voir le message
    voila le résultat:
    ligne 680 f1 at pos 9694 dans f2
    ligne 681 f1 at pos 9697 dans f2
    ligne 682 f1 at pos 9698 dans f2

    ligne 683 f1 at pos 9713 dans f2
    ligne 684 f1 at pos 9714 dans f2
    ligne 685 f1 at pos 9731 dans f2
    ligne 686 f1 at pos 9732 dans f2
    ligne 687 f1 at pos 9763 dans f2

    ..ligne 3192 f1 at pos 43128 dans f2
    ligne 3193 f1 at pos 43129 dans f2
    ligne 3194 f1 at pos 43130 dans f2
    ligne 3195 f1 at pos 43131 dans f2
    ligne 3196 f1 at pos 43132 dans f2
    ligne 3197 f1 at pos 43133 dans f2
    ligne 3198 f1 at pos 43134 dans f2
    ligne 3199 f1 at pos 43137 dans f2
    ligne 3200 f1 at pos 43138 dans f2
    Ben voilà. Ca veut bien dire qu'il n'y a aucune ligne de f1 qui n'est pas dans f2. Et donc quand tu demandes les lignes de f1 qui ne sont pas dans f2, tu obtiens un résultat vide !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [Servlet][EJB]lire un fichier à partir de mon bean
    Par kimausoleil dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/02/2004, 15h26
  2. [MFC] lire un fichier en int
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 10h32
  3. Réponses: 5
    Dernier message: 11/01/2004, 21h17
  4. Lire un fichier de 50 gb
    Par Maryves dans le forum MFC
    Réponses: 2
    Dernier message: 08/01/2004, 15h08
  5. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo