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 :

Itération dans un fichier


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut Itération dans un fichier
    Bonjour,

    Je dispose d'un fichier contenant du texte comme celui la par exemple:
    RRZRRGZZZZZRGZGZZGZGBGGGRBBBGBGRGRGRGBGBGBGBGGRBGBBZBBGRBBGZ
    RRZRRGZZZZZRGZGZZGZGBGGGBBBBGBGRGRGRGBGBGBGBGGRBGBBZBBGRBBGB
    RRZRRGZZZZZRGZGZZGZGZGGGRBBBGBGRGRGRGBGBGBGBGGRBGBBZBBGRBBGB
    GRBBGGBGBGGGBBGBBGBGGBB1
    GRBBGGBGBGGGBBGBBGBGGBB2
    GRBBGGBGBGGGBBGBBGBGGBB3

    Ce que je fais (ou du moins j'essaie) c'est récupérer les différentes lignes dans 3 chaines de caractères différentes. C'est à dire, mettre la 1ere ligne dans la chaine 1, puis la seconde ligne dans la chaine 2, et enfin la 3 éme ligne dans la chaine 3, ensuite on recommence jusqu'à la fin du fichier.

    En couleur pour une meilleure visualisation:

    RRZRRGZZZZZRGZGZZGZGBGGGRBBBGBGRGRGRGBGBGBGBGGRBGBBZBBGRBBGZ
    RRZRRGZZZZZRGZGZZGZGBGGGBBBBGBGRGRGRGBGBGBGBGGRBGBBZBBGRBBGB
    RRZRRGZZZZZRGZGZZGZGZGGGRBBBGBGRGRGRGBGBGBGBGGRBGBBZBBGRBBGB
    GRBBGGBGBGGGBBGBBGBGGBB1
    GRBBGGBGBGGGBBGBBGBGGBB2
    GRBBGGBGBGGGBBGBBGBGGBB3
    chaine1
    chaine2
    chaine3

    Voici le code que j'ai généré (pour cet exemple précis):

    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
     
    f = open("test","r")
     
    chaine1 = ""
    chaine2 = ""
    chaine3 = ""
     
    for i,el in enumerate(f.readlines()):
     
    	if i == 0:
    		chaine1+= el
    	if i == 1:
    		chaine2+= el
    	if i == 2:
    		chaine3+= el
     
    	if i == 3:
    		chaine1+= el
    	if i == 4:
    		chaine2+= el
    	if i == 5:
    		chaine3+= el
    J'ai pensé que la meilleure solution était de se pencher sur les indices du fichier lors du parcours, mon problème est le suivant, je n'arrive pas à incrémenter automatiquement mes indices pour lire une ligne sur 3, car dans le cas ou mon fichier fait 600 lignes je me vois mal définir à la main tous les indices. Je pense que ça tient en 1 ligne de code mais l'inspiration me manque

    Merci à vous

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il suffit d'utiliser la fonction modulo (opérateur '%' en Python):

    k = i%3 donne:
    i=0 => k=0
    i=1 => k=1
    i=2 => k=2
    i=3 => k=0
    i=4 => k=1
    i=5 => k=2
    i=6 => k=0
    i=7 => k=1
    i=8 => k=2
    i=9 => k=0
    ...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Il faudrait que je renvoie mes tables de mutltiplications, j'avais abandonné cette solution car je m'étais trompé dans la division

    Merci pour votre aide Tyrtamos

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Bonjour,

    readlines retourne une liste de lignes; on peut donc facilement sélectionner une ligne sur trois par slicing:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with open("test","r") as f:
        data = f.readlines()
     
    chaine1 = ''.join(data[::3])
    chaine2 = ''.join(data[1::3])
    chaine3 = ''.join(data[2::3])

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Je ne savais pas merci pour la précision !

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

Discussions similaires

  1. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  2. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29
  3. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  4. séparateurs dans un fichier
    Par manuhard dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2002, 11h30
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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