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 :

Extraire un bloc de texte dans un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Par défaut Extraire un bloc de texte dans un fichier
    Bonjour,

    Je veux Extraire un bloc de texte dans un fichier (data.txt) qui commence par une chaîne bien définie (begin) et qui se termine par une autre (end).

    begin=' Call-out authority ='

    end=' Call-in Barring Authority ='

    J'ai essayé avec ça, mais je n'arrive pas à trouver la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    begin='             Call-out authority  ='
    end='       Call-in Barring Authority  ='
     
    with open("data.txt", "r") as f:
       text = f.read()
       i = text.find(begin)
       #print (text[i:])
       #je dois faire quoi pour arrêter jusqu’à end
    Merci d'avance.

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Si le fichier n'est pas trop volumineux tu peux le lire entièrement et ne conserver que la partie qui t'intéresse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with open("data.txt", "r") as f:
        content = f.readlines()
        for idx, line in content:
            if 'Call-out authority' in line:
                begin = idx
            elif ' Call-in Barring Authority' in line:
                end = idx
                break
    text = content[begin:end]
    Si il est trop imposant, alors tu le lis ligne par ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    with open("data.txt", "r") as f:
        text = []
        begin = False
        while 1:
            line = f.readline()
            if 'Call-out authority' in line:
                begin = True
            elif 'Call-in Barring Authority' in line:
                break
            elif begin:
                text.append(line)

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    En utilisant dropwhile d'itertools pour sauter les lignes jusqu'au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from itertools import dropwhile
     
    def get_block_lines(fh, begin, end):
        for line in dropwhile(lambda x: begin not in x, fh):
            yield line
            if end in line: return
     
    with open('data.txt') as fh:
        begin = '             Call-out authority  ='
        end = '       Call-in Barring Authority  ='
        block = ''.join(get_block_lines(fh, begin, end))
        print(block)

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Par défaut Merci.
    Merci beaucoup, les deux solutions marchent très bien.

    Merci CosmoKnacki.

    Merci VinsS.

Discussions similaires

  1. Insertion de blocs texte dans un fichier (sed).
    Par Elijha dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 31/03/2011, 12h19
  2. Réponses: 4
    Dernier message: 07/12/2010, 10h36
  3. extraire données d'un tableau dans un fichier texte
    Par cre31400 dans le forum MATLAB
    Réponses: 4
    Dernier message: 29/07/2009, 15h51
  4. Extraire des blocs de données dans un fichier. AWK?
    Par oliverjack dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2009, 19h56
  5. [langage] Ecrire un bloc de texte dans un fichier
    Par sarahbes dans le forum Langage
    Réponses: 6
    Dernier message: 10/06/2004, 11h40

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