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 :

Accéder à la ligne n+1


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut Accéder à la ligne n+1
    Bonjour à tous,

    désolé pour cette question qui sera considérée comme triviale mais mes recherches concernant la question n'ont pas été fructueuses

    J'ai un programme qui test une condition dans un fichier à la ligne n, si la condition est vérifiée je veux récupérer la ligne qui suit, c'est à dire la ligne n+1.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    c=0
    for i,j in zip(f.readlines(),f2.readlines()):
    	for k in i:
    		if k == '>' and j==i:
    			c+=1
    			for b in range(c):
    				f3 = open("Fichier_%d" % c,"wb")
    				f3.write(str(i+1))
    				f3.write(str(j+1))
    Je cherche à récupérer (ou plutôt écrire) la ligne i+1 et j+1, mais évidemment cette méthode ne tourne pas.

    Merci à vous

  2. #2
    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

    dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i,j in zip(f.readlines(),f2.readlines()):
    i et j sont des lignes

    i+1 et j+1, en dehors d'un problème de syntaxe, ne sont pas ce que tu veux obtenir.

    Boucle sur les indices dans ta liste de lignes et pas sur les lignes elles-mêmes. Tu pourras alors écrire la ligne suivante.

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour avoir l'indice en même temps que les lignes, on peut utiliser 'enumerate':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f1 = [0,1,2,3,4]
    f2 = [5,6,7,8,9]
     
    for i, (l1, l2) in enumerate(zip(f1[:-1], f2[:-1])):
        print i, "=>(", l1, ",", l2, ")"
    0 =>( 0 , 5 )
    1 =>( 1 , 6 )
    2 =>( 2 , 7 )
    3 =>( 3 , 8 )
    S'il y a un i qui convient, la ligne suivante est obtenue dans la boucle par f1[i+1] et f2[i+1].

    le [:-1] est pour neutraliser la dernière ligne, puisqu'on ne pourrait pas avec elle appeler la ligne suivante qui n'existe pas

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Par défaut
    Merci à vous

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Le top pour ton code est l'utilisation du module linecache, qui puis est ultra efficace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import linecache
     
    line = linecache.getline(path_file, 5) # représentation de la ligne 5 avec retour à la ligne, attention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import linecache
    >>> get = linecache.getline
    >>> def chercher(fichier, n, mot):
    ...     if mot in get(fichier, n):
    ...         return get(fichier, n+1)
    ... 
    >>> chercher('setup.py', 1, 'from')
    'from distutils.extension import Extension\n'
    C'est pas beau python?

  6. #6
    Membre Expert

    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
    Par défaut
    Petite note annexe*: les str supportent (très bien) l’opérateur in, normalement nettement plus efficace (et en tout cas nettement plus beau) que de boucler explicitement sur tous les caractères…

    En clair,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for k in i:
            if k == '>' and j==i:
    …peut s’écrire plus simplement*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if '>' in i and i == j:

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

Discussions similaires

  1. Accéder à une ligne précise du document Word
    Par c.piette dans le forum VBA Word
    Réponses: 2
    Dernier message: 16/05/2015, 23h43
  2. Réponses: 5
    Dernier message: 29/07/2010, 09h13
  3. Accéder à des lignes ou des colonnes de tableau ?
    Par Loïc B. dans le forum Général Python
    Réponses: 4
    Dernier message: 21/01/2010, 12h52
  4. Impossible d'accéder aux lignes 7 et 8 d'unTableLayoutPanel
    Par Ghunter59 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 29/12/2008, 11h36
  5. Accéder à une ligne
    Par James64 dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/10/2005, 15h23

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