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 :

Lire fichier de données


Sujet :

Python

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut Lire fichier de données
    Bonjour,

    Je souhaiterais lire un fichier de données (nbr de colonnes différents à chaque ligne..) pour y récupérer certaines valeurs :

    0. 60000. 0. 30000. 0. 0. 25 # x, z, f
    600 30 #x y
    8 8 #
    0 0 #
    5700. 3200. 2400. # e
    5700. 3200. 2400. #tr te
    mesh_sq.msh
    mesh_tr.msh
    mesh_sq.mat
    le nombre de mots (séparer par les espace) après les # (en commentaire) peut changer mais jamais avant.
    Donc j'aimerais pouvoir lui dire:

    - lit le 2eme chiffre à la 2eme ligne

    Si vous pouviez me renseigner sur la fonction la plus appropriée ou m'indiquer un lien utile ça serait parfait ?

    Merci

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Tout ce dont tu as besoin c'est open, les méthodes de str et list

    Que ce soit une récupération de la seconde valeur de la ligne d'un fichier ou d'un index d'une liste bidimensionnelle, le principe est le même, faut juste faire gaffe aux index.

    Après si ton fichier n'est pas trop gros, quelques ko, et que tes accès au fichier sont nombreux, autant stocker ça dans une liste bidimensionnelle.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci de ta réponse,

    J'ai pour l'instant fait ce truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      pathC='./%s/filetest' %iter
      file = open(pathC, "r")
      tempodata=file.read(120)
      dataALLc=tempodata.split()
      x=float(dataALLc[1])
    Ce qui me permet de lire toutes les valeurs.. le 120 est arbitraire mais suffisamment grand pour allez au bout du fichier.
    Ensuite je split et je float..
    Mais c'est pas terrible comme solution.. ne serait ce que le choix du 120 ..

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Si au départ vous voulez:

    Citation Envoyé par Newenda Voir le message
    Donc j'aimerais pouvoir lui dire:

    - lit le 2eme chiffre à la 2eme ligne

    Si vous pouviez me renseigner sur la fonction la plus appropriée ou m'indiquer un lien utile ça serait parfait ?
    alors, il faut commencer par écrire le prototype d'une fonction qui va réaliser çà genre: def readitem(path, linenb, index). Puis ajouter un code minimal qui fera le boulot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        with open(path) as f:
               lines = f.read().splitlines()
        line = lines[linenb]
        data = line.split('#')[0]         # on vire les commentaires.
        return data.split(')[index]    # on récupère la donnée à l'index demandé.
    puis ajouter une gestion d'erreur un peu plus propre, puis essayer d'optimiser pour ne pas relire le fichier à chaque accès, puis...

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

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci beaucoup,

    ça résout mon problème et permis de me familiariser avec les fonctions. Mais ce qui m'étonne c'est qu'il n'y ait aucun module d'ouverture de fichier(?)

    Edit: petit question suplémentaire:

    y'a t il possiblité de remplacer l'index par une série d'index

    au lieu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X=readitem('111/file.dat',0,6)
    demandez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X=readitem('111/file.dat',0,[0:3])
    évidemment, sous cette forme ci, cela ne fonctionne pas
    Merci

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

Discussions similaires

  1. lire écrire un fichier de donnée
    Par Ladgalen dans le forum Calcul scientifique
    Réponses: 13
    Dernier message: 05/10/2009, 21h13
  2. Réponses: 13
    Dernier message: 29/09/2008, 08h10
  3. Réponses: 5
    Dernier message: 17/06/2008, 15h38
  4. Lire un fichier de donnée en utilisant des variables
    Par mehdichess74 dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/04/2008, 11h48
  5. [Debutant] Lire et parser un fichier de données ?
    Par mr_samurai dans le forum Débuter
    Réponses: 5
    Dernier message: 18/01/2008, 12h52

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