Lire et modifier un fichier texte

Signaler
-
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
-
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. Pouvez-vous m'aider svp ?
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

5 réponses

Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 572
Bonjour,

L'utilisation d'un fichier texte dans Python est simplissime :
with open('fic/ficc1.txt', 'r') as orig:
   for ligne in orig:
      colonne = ligne[:-1].split(';')
      print('ligne =',ligne)
      print('colonnes =',colonne) 

A toi de traiter les données.
Messages postés
3
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
1 avril 2021

Merci beaucoup pour ton aide,
Je dois donc maintenant convertir mes données en float en utilisant la fonction float(). Puis-je faire :
ma_liste = [ ]
for i in range(1, len(ma_liste), 1):
for j in range(1, len(ma_liste[i], 1):
float(ma_liste[i][j]

Je ne sais pas si cela peut aller à la suite du code avec colonne et ligne...
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 572
Tout d'abord, pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼
permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Cela permet de conserver l'indentation, primordiale avec Python.

As-tu essayé le code de je t'ai donné ? Pour moi il ne donne pas un tableau 2D constitué avec le fichier chargé. Enfin ton code comporte une erreur de syntaxe en 3ème ligne, et une erreur de logique sur la 4ème, tu convertis une valeur, mais cette conversion est faite dans le vide puisque la valeur résultante n'est pas affectée à une variable.
Messages postés
3
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
1 avril 2021

J'ai tapé ton code cependant j'aimerai y ajouter le calcul des moyennes mais je ne parviens pas à le faire. Il me semblais qu'on ne pouvais pas faire un calcul avec des nombres issus d'un document de texte ? Je ne sais pas comment faire...
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 572
Il faut bien sur que comme tu l'as commencé tu convertisses les champs texte en nombre avec float()
pour charger un tableau 2D directement à partir d'un fichier texte avec séparateur, on peut utiliser la bibliothèque CSV
import csv
liste=list(csv.reader(open('fic/ficc1.txt','r'),delimiter=';'))
print(liste)     
Messages postés
3
Date d'inscription
mercredi 31 mars 2021
Statut
Membre
Dernière intervention
1 avril 2021
>
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021

J'avoue être un peu perdu avec cela, je suis débutante sur python donc je ne comprends pas bien comment cela fonctionne. J'ai donc tappé:
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)


Lorsque je le rentre ce code les colonnes indiquées ne sont pas les bonnes. Cela me donne:
ligne = temps;0;4;8;12;16;20

colonnes = ['temps', '0', '4', '8', '12', '16', '20']
ligne = joe;1.2;1.01;0.73;0.87;1.21;0.81

colonnes = ['joe', '1.2', '1.01', '0.73', '0.87', '1.21', '0.81']
ligne = bob;1.06;1;0.83;1.04;1.24;1.4

colonnes = ['bob', '1.06', '1', '0.83', '1.04', '1.24', '1.4']
ligne = dan;0.89;0.97;0.93;1.23;0.83;0.78

colonnes = ['dan', '0.89', '0.97', '0.93', '1.23', '0.83', '0.78']
ligne = ryu;1.13;0.84;0.92;0.71;0.7;0.95

colonnes = ['ryu', '1.13', '0.84', '0.92', '0.71', '0.7', '0.95']
ligne = ken;0.92;0.75;1.29;0.74;1.28;1.2

colonnes = ['ken', '0.92', '0.75', '1.29', '0.74', '1.28', '1.2']
[['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']]
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 572
Les 2 méthodes de lecture du fichier ne s'utilisent pas ensemble. La seconde est celle qui colle le mieux avec le code que tu as donné pour convertir les champs numériques, en chargeant un tableau
[ ['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'] ]


J'ai l'impression que tu as des soucis pour bien appréhender et articuler, le code python, les données, et les variables qui contiennent les données.

Il faut peut être que tu reprennes le cours sur les types de données, les listes, les tableaux, leur initialisation, mise à jour ...