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 :

Faire une boucle


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 24
    Points
    24
    Par défaut Faire une boucle
    Bonjour,
    j'ai besoin de faire une boucle par contre étant donné que je suis débutant, je n'y arrive pas ..
    Ce que je cherche à faire est de créer plusieurs fichiers .txt dans lequel un tableau sera stocké dans chaque. Le nombre des fichiers peut atteindre 400 fichiers, d ou l intérêt de faire une boucle. moi je l'ai fait pour 3 fichiers sans boucle
    Voici ce que j'ai fait

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #données du premier fichier
    a01=array[(0*(155+4)+1):(0*(155+4)+Nbnoeud+3)]   #j'ai pensé à mettre une variable pour créer la boucle, dans le cas du premier fichier, la variable est = à 0
    a02=array[(0*(155+4)+(Nbnoeud+6)):0*(155+4)+154:2]
    a03=array[(0*(155+4)+(Nbnoeud+7)):0*(155+4)155:2]
    result=[]
    for e01, e02, e03 in zip(a01, a02, a03):
    	result.append(e01[:5] + e02[3:7] + e03[:3])
    	imp=[]
    	imp=result[0:164]
    	f = open(repertoire + "result0.txt",'w') #ecriture du premier fichier
    	f.write( imp +"\n")
    	f.close()
     
    #données du deuxieme fichier
    a11=array[1*(155+4)+1:(1*(155+4)+Nbnoeud+3)] #la variable est = 1
    a12=array[(1*(155+4)+Nbnoeud+6):(1*(155+4)+154):2]
    a13=array[(1*(155+4)+Nbnoeud+7):(1*(155+4)+155):2]
    for e11, e12, e13 in zip(a11, a12, a13):
    	result.append(e11[:5] + e12[3:7] + e13[:3])
    	imp=[]
    	imp=result[0:164]
    	f = open(repertoire + "result1.txt",'w')      #ecriture du fichier 2
    	f.write( imp +"\n")
    	f.close()
     
    #données du 3eme fichier
    a21=array[2*(155+4)+1:(2*(155+4)+Nbnoeud+3)]
    a22=array[(2*(155+4)+Nbnoeud+6):(2*(155+4)+154):2] #i=2
    a23=array[(2*(155+4)+Nbnoeud+7):(2*(155+4)+155):2]
    for e21, e22, e23 in zip(a21, a22, a23):
    	result.append(e21[:5] + e22[3:7] + e23[:3])
    	imp=[]
    	imp=result[0:164]
    	f = open(repertoire + "result2.txt",'w')
    	f.write( imp +"\n")
    	f.close()
     
    #données du 4eme fichier
    a31=array[3*(155+4)+1:(3*(155+4)+Nbnoeud+3)]     #i=3
    a32=array[(3*(155+4)+Nbnoeud+6):(3*(155+4)+154):2]
    a33=array[(3*(155+4)+Nbnoeud+7):(3*(155+4)+155):2]
    for e31, e32, e33 in zip(a31, a32, a33):
    	result.append(e31[:5] + e32[3:7] + e33[:3])
    	imp=[]
    	imp=result[0:164]
    	f = open(repertoire + "result3.txt",'w')
    	f.write( imp +"\n")
    	f.close()
    La boucle aura une forme proche de ce qui suit (mais ça marche pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for i in range(429):
     
            ai1=array[i*(155+4)+1:(i*(155+4)+Nbnoeud+3)]    
            ai2=array[(i*(155+4)+Nbnoeud+6):(i*(155+4)+154):2]
            ai3=array[(i*(155+4)+Nbnoeud+7):(i*(155+4)+155):2]
            for ei1, ei2, ei3 in zip(ai1, ai2, ai3):
             	result.append(ei1[:5] + ei2[3:7] + ei3[:3])
    	        imp=[]
               	imp=result[0:164]
            	f = open(repertoire + "result"+str(i)".txt",'w')
            	f.write( imp +"\n")
            	f.close()
                    i=i+1
    [/CODE]

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Tu y es presque, pour que ça marche, il faut penser à réinitialiser result avant de commencer la boucle interne… De plus, i doit être incrémenté dans la boucle extérieure, et non l’intérieure.

    Tant qu’à faire, j’ai rajouté quelques améliorations “cosmétiques” au code, ça devrait donner quelque chose comme ça*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for i in range(429):
        ai1 = array[i * (155 + 4) + 1:(i * (155 + 4) + Nbnoeud + 3)]
        ai2 = array[i * (155 + 4) + Nbnoeud + 6:i * (155 + 4) + 154:2]
        ai3 = array[i * (155 + 4) + Nbnoeud + 7:i * (155 + 4) + 155:2]
        result = []
        for ei1, ei2, ei3 in zip(ai1, ai2, ai3):
            result.append(ei1[:5] + ei2[3:7] + ei3[:3])
            # Pas besoin de passer par une liste intermédiaire?
        # Préférer with open()..., ça évite d’avoir à fermer explicitement le fichier!
        with open(repertoire + "result" + str(i) + ".txt",'w') as f:
            # Ici, str.join() va intercaler "\n" entre chaque élément de result, donnant
            # ainsi une ligne par ligne de résultat.
            f.write("\n".join(result) +"\n")
        i += 1
    [EDIT] M’étais planté dans l’indentation de l’écriture dans le fichier, doit être dans la première boucle, pas la seconde*!

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Points : 182
    Points
    182
    Par défaut
    Bonjour Chefcou,

    j'avoue ne pas trop comprendre ton code : tes tableaux ne sont pas du python (ou alors du python 3 que je ne connais pas)

    dans le cas ou tu veux enregistrer ~500 fichiers il faut les ouvrir et les fermer séquentiellement, car windows ne peut gérer qu'un nombre limité d'identificateur de fichier simultanément (128 me semble t'il)

    l'idée de ce que tu veux faire est d'écrire des tableaux qui sont peut être eux même dans une tableau plus général. tu peux tenter quelque chose comme ce qui suit et l'adapter.

    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
    import random
     
    # on cree un tableau de tableaux avec des valeurs bidons
    arrayList = []
    for x in xrange(10):#on a 10 tableaux a deux dimensions
        table = []
        for line in xrange(10):#chaque tableau a 10 lignes
            table.append( [ random.random() for val in xrange(10) ] )#chaque ligne a 10 elements
        arrayList.append(table)
     
     
    #transformation d'un talbeau en deux dimension en chaine de caractere à ecrire. le separateur est ;
    def arrayToStr( array ):
        buffer = ''
        for line in array :
            buffer += ';'.join( [ str( element ) for element in line] ) + '\n'
        return buffer    
     
    #on ecrit chaque tableau dans un fichier
    for x in xrange( len( arrayList ) ):
        f = open( 'out_' + str(x) ,'w')
        f.write( arrayToStr( arrayList[x] ) )
        f.close()

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48
  3. faire une boucle ds un formulaire
    Par gohu13 dans le forum Access
    Réponses: 1
    Dernier message: 21/09/2005, 12h54
  4. Réponses: 2
    Dernier message: 01/08/2005, 16h55
  5. Comment faire une boucle ???
    Par HookerSeven dans le forum Access
    Réponses: 6
    Dernier message: 17/06/2005, 12h58

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