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 :

Rechercher une valeur proche dans tableau à partir d'une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Par défaut Rechercher une valeur proche dans tableau à partir d'une liste
    Bonjour,

    je suis de retour avec Python après un heureux évènement... sauf que j'ai tout oublié ou presque.

    J'essaie de "croiser" une liste de fréquence avec un fichier type excel... en fait j'essaie de trouver dans mon tableau (colonne 0) la valeur la plus proche pour chacune des valeurs de ma liste et dès que je l'ai trouvée, prendre la valeur du tableau de la ligne correspondante dans la colonne 3... pour être claire je joins les fichiers.

    Voici ce que j'ai écris pour le moment... mais ça me met un beau message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FreqFile = open(fileFreq,'r')
    ListeF = [ float(f) for f in (FreqFile) ]
    print "Liste des fréquences de calcul", ListeF
    FreqFile.close()
    for FreqVal in ListeF :
        for ligne in open(fileS21,'r'):
            print ligne.index(FreqVal)
    Je vous remercie par avance pour votre aide.

    Patricia
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

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

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

    De quel message d'erreur parles-tu, on a plutôt l'embaras du choix avec ton code.

    Quoiqu'il en soit, est-ce que ce code répond à ta question ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # -*- coding: utf-8 -*-
     
    FreqFile = open('fileFreq.txt', 'r')
    ListeF = [ float(f) for f in (FreqFile) ]
    print "Liste des fréquences de calcul", ListeF
    FreqFile.close()
    for FreqVal in ListeF :
        with open('S21_001135.txt', 'r') as inf:
            lines = inf.readlines()
            for idx, line in enumerate(lines):
                if line.startswith(str(FreqVal)):
                    print "Freqval {0} line {1}: {2}".format(FreqVal, idx, line)

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par bourgui78 Voir le message
    dès que je l'ai trouvée, prendre la valeur du tableau de la ligne correspondante dans la colonne 3...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Freqval {0} line {1}: {2}".format(FreqVal, idx, line.split()[3])
    ?

    @+

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Note:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeF = [ float(f) for f in (FreqFile) ]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if line.startswith(str(FreqVal)):
    Puisque nous avons du texte et du texte tout ceci est inutile : Autant comparer (line.startswith()) puis convertir si vous avez besoin de float.

    @+

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Note:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeF = [ float(f) for f in (FreqFile) ]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if line.startswith(str(FreqVal)):
    Puisque nous avons du texte et du texte tout ceci est inutile : Autant comparer (line.startswith()) puis convertir si vous avez besoin de float.

    @+
    Mon intention était de corriger simplement les lignes lacunaires, non pas de réécrire le code.

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Mon intention était de corriger simplement les lignes lacunaires, non pas de réécrire le code.
    Et moi de même VinsS (index) et non de corriger ton code (juste une info vis à vis de ton .startswith()). Tu n'as retenu que la 'note' ressortie du contexte

    Ceci dit dans l'attente de vous lire bourgui78.

    @+

    PS: heureux événement ? Félicitations

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Par défaut Merci beaucoup
    Désolée pour la réponse tardive... mais je ne travaille pas le mercredi
    et merci à PauseKawa...

    Alors j'ai repris ce qu'a écrit VinsS, mais voilà :
    • pourquoi pour 1 fichier, la valeur de la fréquence à comparer est à 1 décimale (alors que j'ai fait la modif il y a 2 décimales) et pour l'autre fichier il ne se soucie aucunement de cela.
      au final cela me fait une liste de valeur possible, or je voudrais la valeur vraie à défaut la valeur le plus proche - là c'est un cas simple
    • Comment extraire du fichier S21, la valeur du module (colonne3) et seulement cette valeur qui par la suite me servira pour un calcul (la résisitivité si cela vous intéresse)[


    J'ai mis en doc joint mes fichiers et le résultat obtenu

    Je vous remercie encore pour votre aide.

    Patricia
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  2. Suppression d'une ligne d'un tableau à partir d'une valeur de cellule
    Par jerem1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/12/2010, 14h15
  3. Remplir un tableau à partir d'une valeur initiale
    Par Maliciouss dans le forum Pascal
    Réponses: 9
    Dernier message: 13/12/2009, 14h46
  4. Réponses: 28
    Dernier message: 05/03/2009, 12h55
  5. Réponses: 1
    Dernier message: 26/09/2007, 17h50

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