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 :

Extraction de données d'un .txt


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Extraction de données d'un .txt
    Bonjour,

    J'ai déjà eu l'occasion d'extraire des données d'un fichier texte mais là les données sont organisées différemment et je n'y arrive pas.

    Les données:
    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
     
             1,       126,        35,         0,        11
             2,       126,        35,         1,         9
             3,       126,        35,         2,         8
             4,       126,        35,         3,         8
             5,       126,        35,         4,         9
             6,       126,        35,         5,        10
             7,       126,        35,         6,        12
             8,       126,        35,         7,        15
             9,       126,        35,         8,        20
            10,       126,        35,         9,        27
            11,       126,        35,        10,        34
            12,       126,        35,        11,        40
            13,       126,        35,        12,        46
            14,       126,        35,        13,        51
            15,       126,        35,        14,        55
            16,       126,        35,        15,        57
    Je souhaiterai avoir une liste de la forme [[ligne1_colonne1, ligne1_colonne2,ligne1_colonne3, ligne1_colonne4,ligne1_colonne5],...,[lignen_colonne1, lignen_colonne2,lignen_colonne3, lignen_colonne4,lignen_colonne5]]

    J'ai déjà fais des essais mais peu concluants:
    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
    'Manipulation du fichier de donnees waypoints'
    file1 = open("fichierdedonnees.txt", "r") # Ouverture du fichier en lecture seule
    # Attention l\'emplacement du fichier evolue selon les plateformes
    file=file1.read() # Lecture du fichier
    ligne = file.split("\n") # Decoupage de chaque ligne
    print(len(ligne))
     
    'Creation des differentes listes (crochets, les listes sont modifiables)utilisees dans la suite'
    une_ligne=list() #  59,3726 est la latitude d\'un waypoint par exemple, c\'est une chaine de caracteres
    colonne_1=list()
    colonne_2=list()
    colonne_3=list()
    colonne_4=list()
    colonne_5=list()
     
    ' Extraction des colonnes interessantes dans chaque ligne'
    for i in range(0,10): #normalement len(ligne)-1
        colonne= ligne[i].split("\t")
        une_ligne.append(colonne[0]) # Colonne de la latitude exprimee en degres
    file1.close() # Fermeture du fichier de donnees waypoints
     
     
     
    for i in range(0,10): #Pour toutes les lignes
        j=0
        while une_ligne[i][j]=='':
            j+=1
            print ('j=',j)
        while une_ligne[i][j]!=',':
            colonne_1.append(une_ligne[i][j])
            j+=1
        while une_ligne[i][j]==',' or une_ligne[i][j]=='':
            j+=1
        while une_ligne[i][j]!=',':
            colonne_2.append(une_ligne[i][j])
            j+=1
        while une_ligne[i][j]==',' or une_ligne[i][j]=='':
            j+=1
        while une_ligne[i][j]!=',':
            colonne_3.append(une_ligne[i][j])
            j+=1
        while une_ligne[i][j]==',' or une_ligne[i][j]=='':
            j+=1
        while une_ligne[i][j]!=',':
            colonne_4.append(une_ligne[i][j])
            j+=1
        while une_ligne[i][j]==',' or une_ligne[i][j]=='':
            j+=1
    print (colonne_1)
    Merci d'avance pour votre aide, pas forcément sur mon code mais une solution efficace

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mp0777236 Voir le message
    Bonjour,

    J'ai déjà eu l'occasion d'extraire des données d'un fichier texte mais là les données sont organisées différemment et je n'y arrive pas.

    Les données:
    (snip)(snip)

    Je souhaiterai avoir une liste de la forme [[ligne1_colonne1, ligne1_colonne2,ligne1_colonne3, ligne1_colonne4,ligne1_colonne5],...,[lignen_colonne1, lignen_colonne2,lignen_colonne3, lignen_colonne4,lignen_colonne5]]

    J'ai déjà fais des essais mais peu concluants:
    (snip)(snip)

    Merci d'avance pour votre aide, pas forcément sur mon code mais une solution efficace
    Bonjour,

    Effectivement, vous vous compliquez beaucoup la vie !

    En me basant sur les données fournies :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    # on ouvre le fichier dans un contexte
    with open("fichierdonnees.txt") as fichier:
     
        # on lit toutes les lignes en une seule fois
        lignes = fichier.readlines()
     
        # on parcourt les lignes avec index
        for index, ligne in enumerate(lignes):
     
            # un peu de ménage...
            ligne = list(map(int, ligne.replace(",", "").split()))
     
            # vérification console
            print("ligne {}: {}".format(index, ligne))
     
            # màj lignes
            lignes[index] = ligne
     
        # end for
     
        # vérification console
        print("\nrésultat final (lignes):\n\n", lignes)
     
    # end with
    Et voilà le travail !

    @+.

  3. #3
    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,

    On peut grandement simplifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    data = []
    with open('donnees.txt', 'r') as inf:
        for line in inf.readlines():
            data.append([d[:-1] for d in line.split('\t') if d])
     
    print data
    En fait le code est encombré du fait que les données sont séparées par une tabulation, certes, mais aussi par une virgule et les lignes ne commencent pas par une donnée mais une tabulation.

    Si c'est ton code qui crée ce fichier, modifie ces deux choses là et tu simplifieras la lecture.

  4. #4
    Invité
    Invité(e)
    Par défaut Merciiiii :)
    Merci beaucoup à vous deux,

    J'ai préféré la version de Tarball69 parce qu'en terme de présentation du résultat final elle convenait mieux à mes attentes.
    En tout cas, j'ai effectivement vu que j'étais allée chercher trop compliqué et j'ai compris vos solutions.
    Merci infiniment en tout cas.

    Pour VinsS, hélas, ce n'est pas moi qui crée le fichier texte (ce que je regrette fort vu la présentation pas sympa de ce fichier) sinon j'aurais essayé de travailler sur celui-ci bien sûr.

    Bonne journée!

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

    Un peu de pub pour les regexp?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> import re
    >>> line = '         1,       126,        35,         0,        11'
    Pour éliminer tout ce qui n'est pas dans [^a-zA-Z0-9_]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.sub('\W+', ' ', line).split()
    ['1', '126', '35', '0', '11']
    Ceci dit, on peut se contenter de récupérer les suites d''alnum':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.findall('\d+', line)
    ['1', '126', '35', '0', '11']
    Mais bon quand on débute, passer du temps à assimiler boucles et objets de base est nécessaire.

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

Discussions similaires

  1. extraction des données de fichier txt dans un tableau?
    Par lina_21 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/03/2010, 11h47
  2. extraction des données du fichier txt
    Par micha1 dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 14/01/2010, 14h28
  3. Extraction de données d'un TXT
    Par PATMA dans le forum Excel
    Réponses: 1
    Dernier message: 27/10/2009, 12h47
  4. Extraction de données à partir de fichiers txt
    Par rob408231 dans le forum MATLAB
    Réponses: 15
    Dernier message: 13/06/2008, 15h17
  5. [VBA Excel] Extraction de données fichier txt vers Excel et mise en forme
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2008, 11h45

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