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 et modifier un fichier texte sur Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2021
    Messages : 11
    Par défaut Lire et modifier un fichier texte sur Python
    Bonjour,
    Je suis novice dans l'utilisation de Python et je souhaiterai à partir d'un fichier texte qui contient des valeurs de glycémie créer un script qui permettrait d'effectuer les moyennes de ces valeurs glycémiques par personnes sur une colonne et une autre moyenne issue de la glycémie de chaque personne en fonction du temps sur une ligne. Savez-vous comment y parvenir ? Merci à vous
    Ci-dessous le contenu du fichier:

    temps;0;4;8;12;16;20
    joe;1.2;1.01;0.73;0.87;1.21;0.81
    bob;1.06;1;0.83;1.04;1.24;1.4
    dan;0.89;0.97;0.93;1.23;0.83;0.78
    ryu;1.13;0.84;0.92;0.71;0.7;0.95
    ken;0.92;0.75;1.29;0.74;1.28;1.2
    Je vous mets mon début de script cependant je ne sais pas s'il est bon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with open('glycemie.txt', 'r') as fichier:
       for ligne in fichier:
          colonne = ligne[:-1].split(';')
          print('ligne =',ligne)
          print('colonnes =',colonne)
     
    import csv
    liste=list(csv.reader(open('glycemie.txt','r'),delimiter=';'))
    print(liste)

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Si j'ai bien compris, tu as une moyenne horizontale (la glycémie de joe, dan, etc) et une autre verticale (la glycémie de tous au temps 0, 4, 8, etc).
    La moyenne horizontale c'est peanut. Tu as ta ligne qui contient toutes les valeurs, te suffit de la splitter et additionner les valeurs
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> lig="joe;1.2;1.01;0.73;0.87;1.21;0.81"
    >>> val=lig.split(";")[1:]
    >>> val
    ['1.2', '1.01', '0.73', '0.87', '1.21', '0.81']
    >>> sum(float(x) for x in val)/len(val)
    0.9716666666666667
    Pour la moyenne verticale là c'est plus chaud. Je pense que je commencerais par tout récupérer dans un tableau 2D ce qui me permettrait alors de couper ce tableau verticalement pour, pour chaque ligne, ne prendre que la colonne qui va bien.
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> with open("fic", "r") as fp: data=tuple(tuple(ligne.strip().split(";")) for ligne in fp)
    >>> print(data)
    (('temps', '0', '4', '8', '12', '16', '20'), ('joe', '1.2', '1.01', '0.73', '0.87', '1.21', '0.81'), ('bob', '1.06', '1', '0.83', '1.04', '1.24', '1.4'), ('dan', '0.89', '0.97', '0.93', '1.23', '0.83', '0.78'), ('ryu', '1.13', '0.84', '0.92', '0.71', '0.7', '0.95'), ('ken', '0.92', '0.75', '1.29', '0.74', '1.28', '1.2'))
    Le reste ce n'est que de la boucle et de l'addition.

    Citation Envoyé par VickyLim Voir le message
    Je vous met mon début de script cependant je ne sais pas s'il est bon:
    Mouais. Un script on sait s'il est bon ou pas. En le lisant on doit pouvoir dérouler dans sa tête les opérations qu'il va faire et dire si ces opérations vont produire le résultat demandé. Dire "je ne sais pas s'il est bon" c'est juste un euphémisme pour "je sais qu'il n'est pas bon". Parce qu'en l'état, tu ne fais rien d'autre que lire ton fichier et afficher ses données. Entre ça et rien...
    Ceci dit, pour supprimer le "\n" tu as str.strip() plus efficace que taper sur ligne[:-1] (je l'utilise dans mon second exemple). Passer par csv oui ça peut être une solution mais qui me semble inutile dans ce cas précis (ce module est fait pour parser du csv anarchique, comme on peut le voir dans ces exemples).
    Et
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Dans un premier temps contente toi de lire l'information de ton fichier et de stocker ça dans un tableau (une liste de liste, un numpy.array, un objet CSV, ce que tu veux, mais une structure python qui contienne tes données). Et après tu itères et tu fais des sommes pour calculer les moyennes sur les valeurs que tu as récupéré.

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2021
    Messages : 11
    Par défaut
    Bonjour,
    Je tiens à vous remercier pour votre réponse qui permet de m'éclairer un peu plus sur la compréhension du langage Python. J'ai de mon côté tenté un début de script à la suite de votre réponse:
    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
    import csv
    liste=list(csv.reader(open('glycemie.txt','r'),delimiter=';'))
    print(liste)
     
    ligne_temps = liste[0:1]
    ligne_joe = liste[1:2]
    ligne_bob = liste[2:1]
    ligne_dan = liste[3:4]
    ligne_ryu = liste[4:5]
    ligne_ken = liste[5:6]
     
    ligne_temps.append("moyenne")
    float(ligne_joe)
    glycemie1 = sum(ligne_joe)/len(ligne_joe)
    ligne_joe.append(glycemie1)
    print(glycemie1)
    Cependant je n'arrive pas à convertir la ligne_joe en float et cela même en faisant "float(ligne_joe)" donc je ne peux calculer la moyenne savez-vous comment faire ?
    Merci à vous

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VickyLim Voir le message
    Cependant je n'arrive pas à convertir la ligne_joe en float et cela même en faisant "float(ligne_joe)" donc je ne peux calculer la moyenne savez-vous comment faire ?
    "ligne_joe" ce n'est pas un nombre mais une liste de nombres. Tu ne peux donc pas demander float(liste_de_truc) car Python ne sait pas transformer ça en "float de chaque truc". Je t'ai montré comment faire ça dans mon premier exemple.

    Question algo, donner des noms de variables associés à leur contenu c'est super mauvais. On ne nomme pas un int contenant une valeur (ex 150) en y incluant sa valeur (ex i_150=150) parce que cela fait perdre à la variable toute sa notion de variable justement (que se passe-t-il le jour où tu veux y mettre 200?). Tu as "liste" qui est un tableau 2D totalement impersonnel, ce qui te permet justement d'y appliquer tout algorithme par une boucle de 1 à n et de traiter donc n fois ligne[x] en ne codant l'algo de traitement qu'une seule fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(liste)):
    	print(liste[i])
    Plus facile que d'écrire
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print(ligne_joe)
    print(ligne_bob)
    print(ligne_dan)
    print(ligne_ryu)
    print(ligne_ken)

    Toutefois, évite tout de même de tomber dans l'excès inverse et de donner des noms comme "liste" qui ressemble à l'objet list.

    Et
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2021
    Messages : 11
    Par défaut
    J'ai vraiment du mal à comprendre et écrire ce code... Pouvez-vous me le donner pour que je puisse comprendre svp ? Je sais que cela est sûrement beaucoup vous demander mais je suis bloquée sur cela depuis des jours et je ne trouve toujours pas comment y parvenir. Vous me serez d'une grande aide. Merci à vous

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Pour faire des moyennes, il vous faut des données chiffrées.

    Quand vous faites ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import csv
    liste=list(csv.reader(open('glycemie.txt','r'),delimiter=';'))
    print(liste)
    vous avez une liste de string.
    Il faut modifier votre lecture pour transformer les string en des flottants. Donc au lieu de faire un list() dont vous ne maitrisez pas trop ce que ca fait, et bien construisez cette liste pas à pas, en utilisant une boucle for, sur chacune des lignes du fichier, ligne que vous pourrez traiter pour appliquer la transformation souhaitée qui va bien.

    avant d'essayer de calculer la moyenne, afficher vos données et assurer vous d'avoir des float et pas des strings

Discussions similaires

  1. Modifier un fichier texte avec Python
    Par dino.adnane dans le forum Général Python
    Réponses: 5
    Dernier message: 08/05/2018, 01h57
  2. Réponses: 2
    Dernier message: 01/06/2011, 16h36
  3. lire et modifier un fichier texte
    Par developpeur82 dans le forum Entrée/Sortie
    Réponses: 17
    Dernier message: 03/04/2010, 10h25
  4. Lire, comparer et modifier 2 fichiers texte
    Par jojo57 dans le forum Langage
    Réponses: 9
    Dernier message: 16/04/2009, 15h58
  5. lire/écrire sur un fichier texte sur un serveur distant
    Par nabmoah dans le forum Visual C++
    Réponses: 6
    Dernier message: 12/02/2007, 10h27

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