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 :

tableau à partir d'un fichier texte et binaire


Sujet :

Python

Vue hybride

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Par défaut tableau à partir d'un fichier texte et binaire
    bonjour
    débutant sous python

    je souhaiterais faire un tableau à partir d'un fichier.txt de cette forme

    0 120 0 120 0.25 0 0.25
    120 0 240 0 240 0.25 120 0.25
    240 0 360 0 360 0.25 240 0.25
    0 0.25 40 0.25 40 0.5 0 0.5
    40 0.25 80 0.25 80 0.5 40 0.5
    80 0.25 120 0.25 120 0.5 80 0.5
    120 0.25 160 0.25 160 0.5 120 0.5
    160 0.25 200 0.25 200 0.5 160 0.5
    200 0.25 240 0.25 240 0.5 200 0.5
    240 0.25 280 0.25 280 0.5 240 0.5
    280 0.25 320 0.25 320 0.5 280 0.5
    320 0.25 360 0.25 360 0.5 320 0.5
    0 0.5 22.5 0.5 22.5 0.75 0 0.75
    22.5 0.5 45 0.5 45 0.75 22.5 0.75
    45 0.5 67.5 0.5 67.5 0.75 45 0.75
    67.5 0.5 90 0.5 90 0.75 67.5 0.75
    90 0.5 112.5 0.5 112.5 0.75 90 0.75
    112.5 0.5 135 0.5 135 0.75 112.5 0.75
    135 0.5 157.5 0.5 157.5 0.75 135 0.75
    en fait je voudrais récupérer ces données, chacune séparées de deux espaces et les mettre dans un tableau de même forme. ça me donnerait un tableau, dans mon cas de 600000 lignes et 8 colonnes.

    voilà le début de mon code mais je bloque, erreur pour le split, je pense qu'aprés il faut faire une boucle pour remplir le tableau.

    merci pour l'aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #! /usr/bin/env /DATA/LIENS/exploit/bin/python
    # -*- coding: utf-8 -*-
     
    # -*- coding: latin-1 -*-
     
    file_coord='/home/thomas/depot/MT/SSMI_EMIS/cells_boundaries.txt'
    file_data='/home/thomas/depot/MT/SSMI_EMIS/SSMI_EMISMEAN_01.dat'
     
    from numpy import *
     
    # ouverture du fichier texte 
    f=open(file_coord,'r')
    lignes =f.readlines().split("  ")
    f.close()
    pour info, je bosse sur une plate forme linux

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Par défaut
    Peut être en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lignes =f.readlines().split(None,8)
    ou None est sans séparateur alors c'est espace par défaut et 8 le nombre de mots a compter. Si il y a plus de mots (ici 8) tout le reste est monté.

    Ca doit marcher, je pense.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    readlines() est une méthode de fichier qui produit une liste.
    split() est une méthode de chaine qui produit une liste

    split() ne peut pas s'appliquer à la liste que produit f.readlines()

    readline() produit une chaîne
    Mais il faudra mettre une boucle
    Au lieu d'une bête boucle, une list comprehension sera mieux

    PS
    Pardon, je précise: pour utiliser une list comprehension , il faut itérer dans le fichier comme un itérateur, sans la fonction readline()

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Par défaut
    merci pour ces réponses mais je ne vois pas comment utiliser une liste dans mon cas

    je me penche dessus, je vous tiens au courant

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Par défaut
    j'ai essayé avec cette ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lignes =f.read().split("  ")
    j'obtiens une en fait une succession de caracrtères mais pas de la forme que je veux

    '0', '0', '120', '0', '120', '0.25', '0', '0.25\n120', '0', '240', '0', '240', '0.25',
    j'ai le /n qui correspond à un changement de lignes et surtout les données se suivent et ne sont pas en colonnes (ici normalement 8 colonnes.

    merci pour l'aide

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Je n'utilisais pas numpy jusqu'à présent mais le peu que j'en savais me faisait penser que l'obtention de ton tableau passait par la création d'une liste de 19 (= nombre de lignes dans le fichier que tu donnes) sous-listes de 8 nombres, puis la création du tableau à partir de cette liste.

    Pour obtenir la liste, je pensais que tu voulais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f = open('valeurs.txt')
    li = []
    while 1:
        ln = f.readline().split()
        if ln:
            li.append(ln)
        else:
            break
    f.close()


    Ce qui peut aussi s'écrire en utilisant un itérateur sur le fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f = open('valeurs.txt')
    li = []
    for ln in f:
        li.append(ln.split())
    f.close()


    Et j'ai suggéré d'utiliser une list comprehension

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f = open('valeurs.txt')
    li = [ ln.split() for ln in f ]
    f.close()



    Je me suis mis à numpy pour vérifier qu'ensuite la création du tableau est sans encombre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from numpy import *
    f = open('valeurs.txt')
    li = [ ln.split() for ln in f ]
    f.close()
    tableau = array(li)

    Si on aime la concision:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from __future__ import with_statement 
    from numpy import *
    with open('valeurs.txt') as f:
        tableau = array([ln.split() for ln in f])




    Notas:

    - La première ligne du fichier que tu donnes a 7 valeurs et non pas 8.
    J'en ai rajouté une pour que tous ces codes tournent bien.


    - J'avais commencé à écrire un premier code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from numpy import *
    f = open('valeurs.txt')
    li = []
    ln = 'go'
    while ln:
        ln = f.readline().split()
        li.append(ln)
    f.close()
    tableau= array(li)
    mais j'obtenais l'erreur
    ValueError: setting an array element with a sequence
    parce qu'à la fin de l'itération ln prenait la valeur "", ce qui ajoutait une liste vide comme dernier élément de li. Quand array tombait sur cette dernière sous-liste vide, différente en longueur des précédentes sous-listes , il bloquait.


    PS

    S'il est possible de créer l'array sans passer par la création préalable de la liste li, ça m'intéresse de savoir comment il faut faire.

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

Discussions similaires

  1. remplir tableau dans une page JSP à partir d'un fichier texte
    Par ramzouni dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2009, 20h44
  2. Créer un tableau à partir d'un fichier texte
    Par jchampen dans le forum Langage
    Réponses: 9
    Dernier message: 04/11/2008, 08h34
  3. construire un tableau à partir d'un fichier texte
    Par Invité dans le forum Général Python
    Réponses: 4
    Dernier message: 25/06/2008, 19h31
  4. initialisation d'un tableau a partir d'un fichier texte
    Par infofree dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/04/2008, 21h17
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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