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 :

Boucle for sur 2 fichiers [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Boucle for sur 2 fichiers
    Bonjour,

    je bloque sur un problème surement simple mais je ne trouve pas de solution sur le net.

    Je cherche à faire une boucle for sur chaque ligne de 2 fichiers dans la même boucle par exemple:

    for ligne in fichier1 and ficher2:
    print ligne
    Bien sur j'ouvre les fichiers en readlines avant.

    Pour le moment je fait 1 boucle for pour chaque fichier mais je suis sur qu'il y a mieux.

    Comment écrire "Pour les lignes du fichier1 ET du fichier 2?

    Merci beaucoup

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par knibalpj Voir le message
    Comment écrire "Pour les lignes du fichier1 ET du fichier 2?
    La chose retournée par open est un itérable.
    Après vous avez la fonction zip qui permet de faire çà sur des itérables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> a = 1, 2, 3; b = list('abc')
    >>> for z in zip(a, b): print(z)
    ...
    (1, 'a')
    (2, 'b')
    (3, 'c')
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour wiztrick,

    merci pour ton retour, malheureusement j'ai écrit ton code mais ça ne marche pas avec les fichier texte en readlines.
    Si j'enlève le .readlines il ne me renvoie que la 1er ligne de chaque fichier.

    Voici mon code. Une erreur?

    a = open("1.txt", "r").readlines
    b = open("2.txt", "r").readlines

    for ligne in zip(a, b):
    print ligne

    TypeError: zip argument #1 must support iteration
    Petite précision, je souhaites balayer toute les lignes de mon fichier 1 dans ma boucle puis refaire pareil dans mon fichier 2.
    Une sorte de concatenation des 2 fichiers avant la boucle For mais sans création d'un 3iem fichier.


    Merci et bonne journée

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Il faut user et abuser des instructions du type :
    print(variable), print(type(variable)), print(len(variable))
    Pas d'aide par mp.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    A vrai dire je ne comprend pas comment cette forme de fonction va m'aider dans mon cas?

    Mais je retiens la remarque.

    Bonne journée

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    C'est ".readlines()" ou encore ".readline" au choix.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par knibalpj Voir le message
    A vrai dire je ne comprend pas comment cette forme de fonction va m'aider dans mon cas?
    A vérifier que les instructions que vous avez tapé retournent bien la chose attendue. Dit autrement, si "open("1.txt", "r").readlines" ne fonctionne pas, essayez de jouer un peu avec pour trouver votre erreur avant de venir raconter ici "çà ne marche pas"... et pour çà "abuser de print" est incontournable.

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

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    zip permet d'"""alterner""" ce qui vient des 2 sources. Pour avoir tout ce qui vient de source 1 puis tout ce qui vient de source 2, ce ne serait pas append ?
    Et donc peut être ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a = open(fic1,"r").readlines()
    b = open(fic2, "r").readlines()
     
    for ligne in append ( a,b) :
       print ligne
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    zip permet d'"""alterner""" ce qui vient des 2 sources. Pour avoir tout ce qui vient de source 1 puis tout ce qui vient de source 2, ce ne serait pas append ?
    Et donc peut être ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a = open(fic1,"r").readlines()
    b = open(fic2, "r").readlines()
     
    for ligne in append ( a,b) :
       print ligne
    Non.

  10. #10
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    En fait, il faudrait peut-être présenter quelques lignes de code avec le résultat retourné et éventuellement quelques lignes des fichiers à traiter, non ?
    Pas d'aide par mp.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    zip permet d'"""alterner""" ce qui vient des 2 sources. Pour avoir tout ce qui vient de source 1 puis tout ce qui vient de source 2, ce ne serait pas append ?
    a et b sont des listes (ou plus généralement des séquences) et l'opération permettant de concaténer 2 séquences est "+".
    Ceci dit, si les fichiers sont "gros", les lire et les concaténer "en mémoire" alors que vous aller faire un traitement ligne à ligne, consommera de la mémoire pour rien.... On préférera utiliser/adapter itertools.chain pour lire chacun des fichiers au fur et à mesure.

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

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2016
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Bonjour messieurs,

    C'est bon j'ai ma solution qui était toute bête. c'est simplement le signe +


    a = open("a.txt", r).readlines()
    b = open("b.txt", r).readlines()

    for ligne in a+b:
    do something
    Merci pour votre aide

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

Discussions similaires

  1. [Batch] Boucle for sur tous les fichiers sauf certaines extentions
    Par SuperPat dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 03/01/2014, 00h43
  2. Probleme sur un boucle For d'un fichier texte
    Par erlerwade dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 16/12/2011, 15h36
  3. [BASH] boucle for sur des fichiers, recuperation du chemin ?
    Par zevince dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 13/11/2007, 10h47
  4. Boucle for sur fichiers sauf un !
    Par coincoin22 dans le forum Linux
    Réponses: 4
    Dernier message: 13/08/2007, 14h41
  5. [Eval] Problème de boucle for sur des tableaux
    Par battle_benny dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/01/2006, 23h55

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