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 :

écrire un fichier en fonction de deux fichiers


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut écrire un fichier en fonction de deux fichiers
    Bonjour,

    J'ai deux fichiers .cvs et je cherche, à l'aide d'un script python à écrire un troisième .cvs avec les donnés des deux premiers.

    Est-il possible d'imbriquer deus boucles for X in X ?

    En effet le script doit lire la première ligne du fichier 1, comparer cette première ligne avec la totalité des lignes du fichier 2 puis recommencer avec la deuxième ligne du fichier 1...

    Problème, quand je teste ce morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for ligneFichier1 in fichier1:
        print("1")
        for ligneFichier2 in fichier2: 
            print("2")
    J'obtiens en imaginant que les deux fichier ont trois lignes :
    > 1
    > 2
    > 2
    > 2
    > 1
    > 1

    Alors que je cherche à avoir :
    > 1
    > 2
    > 2
    > 2
    > 1
    > 2
    > 2
    > 2
    > 1
    > 2
    > 2
    > 2

    En gros le deuxième for ne s'execute qu'une fois. Pour info les lecteurs utilisent la bibliothèque cvs.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Il n'y a pas de raison qu'il y ai un StopIteration du fichier '2' : Le code fait ce qui est demander.
    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
    >>> for ligneFichier1 in range(3):
    ...     print('lecture de la ligne %d du fichier1' % ligneFichier1)
    ...     for ligneFichier2 in range(3):
    ...         print('compare la ligne %d du fichier1 avec la ligne %d du fichier2' % (ligneFichier1, ligneFichier2))
    ... 
    lecture de la ligne 0 du fichier1
    compare la ligne 0 du fichier1 avec la ligne 0 du fichier2
    compare la ligne 0 du fichier1 avec la ligne 1 du fichier2
    compare la ligne 0 du fichier1 avec la ligne 2 du fichier2
    lecture de la ligne 1 du fichier1
    compare la ligne 1 du fichier1 avec la ligne 0 du fichier2
    compare la ligne 1 du fichier1 avec la ligne 1 du fichier2
    compare la ligne 1 du fichier1 avec la ligne 2 du fichier2
    lecture de la ligne 2 du fichier1
    compare la ligne 2 du fichier1 avec la ligne 0 du fichier2
    compare la ligne 2 du fichier1 avec la ligne 1 du fichier2
    compare la ligne 2 du fichier1 avec la ligne 2 du fichier2
    >>>
    Donc votre souci ne viens pas de là.

    Donnez votre 'vrais' code.

    @+

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    je pense à un truc tout bête (possible, c'est pas forcément ce qui se passe, ça dépend du code)

    Si chaque ligne du fichier 1 est comparée à l'ensemble des lignes du fichier 2, il ne faut pas oublier de "rembobiner" le fichier 2 après chaque itération sur une ligne du fichier 1.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    Voici mon code :

    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
    #!/usr/bin/python
    # -*-coding:Utf-8 -*#
     
    import csv
     
    with open("auth.csv", "rb") as hashes:
    	with open("crack_hashes.cvs", "rb") as crackHashes:
    		with open("result.csv", "wb") as result:
    			readerHashes = csv.reader(hashes, delimiter=',')
    			readerCrackHashes = csv.reader(crackHashes, delimiter=':')
    			writerResult = csv.writer(result, delimiter=',')
     
    			for rowHashes in readerHashes:
    				for rowCrack in readerCrackHashes:
    					if rowHashes[2] == rowCrack[0]:
    						finalRow = [rowHashes[0],rowHashes[1],rowHashes[2],rowCrack[1],rowHashes[4],rowHashes[5],rowHashes[6],rowHashes[7]]				
    						writerResult.writerow(finalRow)
    Le fichier result.cvs est corrompu

  5. #5
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par ma pomme
    Si chaque ligne du fichier 1 est comparée à l'ensemble des lignes du fichier 2, il ne faut pas oublier de "rembobiner" le fichier 2 après chaque itération sur une ligne du fichier 1.
    bingo !

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    merci d'avoir trouvé la source du problème

    Comment faire pour "rembobiner" un fichier ?

  7. #7
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Le "rewind" n'a pas été porté depuis le C vers Python, donc fichier.seek(0)

    (à moins qu'il y ait quelque chose dans csv pour faire la même chose mais j'en doute : c'est un "file" qu'on passe en paramètre de csv.reader : le "reader" fait avec ce qu'on lui fournit - mais je ne connais pas bien csv)

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    impressionnant plxpy

    En une ligne tu résous le problème sur lequel je me suis cassé les dents durant toute l'après-midi...

    merci

  9. #9
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    ben faut bien que les années au compteur n'aient pas que des inconvénients, mais aussi quelques avantages !

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    Mon problème est résolu mais je n'aimerais pas réouvrir un sujet pour aussi peu :

    Est-il possible d'optimiser la déclaration de finalRow ?

  11. #11
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par Bellumm
    Est-il possible d'optimiser la déclaration de finalRow ?
    Optimiser l'écriture (indice par indice) ou les performances (re-(lecture+décodage csv) du deuxième fichier à chaque itération) ?

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    Je penser à Optimiser l'écriture mais si tu as une proposition afin d'optimiser les performances (re-(lecture+décodage csv) du deuxième fichier à chaque itération je suis preneur

  13. #13
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Puisque tu ne fais que changer la valeur de l'index 3 dans rowHashes, tu peux remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    finalRow=rowHashes[0],rowHashes[1],rowHashes[2],rowCrack[1],rowHashes[4],rowHashes[5],rowHashes[6],rowHashes[7]]
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rowHashes[3] = rowCrack[1]
    Ensuite tu écris dans le fichier résultat ou rowHashes ou rowHashes[:7] selon le nombre de "colonnes" (au sens csv) du fichier 1

    Sinon, question "performances", actuellement tu lis et décodes (au sens csv) le fichier 2 autant de fois qu'il y a de lignes dans le fichier 1.

    Si la taille de ton fichier 2 est raisonnable, pourquoi ne pas le charger (partiellement !) une bonne fois pour toutes sous forme de dictionnaire :

    • les clés sont les valeurs de l'index 0 retourné par le "reader csv" (qui te sert dans ton test)
    • les valeurs sont les valeurs de l'index 1 (pour mettre à jour la ligne écrite dans le fichier en sortie)


    Ensuite, tu déroules le fichier 1 en te servant du dictionnaire et écris ton fichier en sortie.


    (j'espère que je ne me suis pas trompé dans les noms des variables mais, sinon, "ça le fait")

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    merci.

    Je vais mettre en application tes précieux conseils

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/05/2015, 14h37
  2. Réponses: 1
    Dernier message: 30/09/2013, 14h46
  3. Réponses: 9
    Dernier message: 22/01/2011, 13h56
  4. variables de PHP a JavaScript par fonction dans un fichier de fonctions
    Par areuh_fr dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 03/08/2010, 11h46
  5. appeler la fonction d'un fichier js depuis un autre fichier
    Par kohsaka dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/09/2007, 18h49

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