Traitement d'un fichier texte par python [Résolu/Fermé]

Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
-
Bonjour,

Je me suis bloqué dans mon code.... Je dois exploiter les données dans un fichier texte pour les traiter.

Premièrement je dois calculer pour chaque ensemble de mesures la moyenne de ces valeurs (il ne faut pas prendre en compte les valeurs nulles) qui ont séparés par $.

Voila un petit exemple de mon fichier:

$
0.111110
0.313569
0
0.004442
0.121211
0.112812
1.222312
0
0.121215
$
0
0.122311
0.013565
0.004447
0.121211
0.121212
1.222312
0
0.121215
$
0.121454
0.345456
0
0.078444



Et voilà mon code mais j'ai pas pu avancer malheureusement

import numpy as np

f = open ( 'fichier.txt' , 'r')
#On split par le caractere $ et on prend pas le premier caractere en consideration
for f in f.read().split("$"):
    n = 0
    # On split par \n pour prendre ligne par ligne et prend pas le premier ligne
    D = f.split("\n")[1:] 
    for line in D: # On passe ligne par ligne
          # On verifie est ce que la ligne n'est pas vide
          if line not in ('\n', '\r\n', " \n",''):
          n = n + 1


... où n est le nombre des lignes non vides (je calcule n pour d'autre calculs )

Merci d'avance

Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
28955
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 août 2019
6621
1
Merci
Bonjour,

À ce stade ton code est mal indenté, ce qui explique pourquoi il ne marche pas :

(mando@aldur) (~) $ python3 toto.py 
File "toto.py", line 13
n = n + 1
^
IndentationError: expected an indented block


Voici ton programme corrigé et légèrement amélioré :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

with open("fichier.txt" , "r") as f:
    # On split par le caractère $ et on prend pas le premier caractère en considération
    for f in f.read().split("$"):
        n = 0
        # On split par \n pour prendre ligne par ligne et prend pas le premier ligne
        D = f.split("\n")[1:]
        for line in D: # On passe ligne par ligne
            line = line.strip()
            if line: # Si la ligne est non vide
                n = n + 1
                print("line = %s" % line)


À l'exécution, on a bien le résultat attendu :

(mando@aldur) (~) $ python3 toto.py 
line = 0.111110
line = 0.313569
line = 0
line = 0.004442
line = 0.121211
line = 0.112812
line = 1.222312
line = 0
line = 0.121215
line = 0
line = 0.122311
line = 0.013565
line = 0.004447
line = 0.121211
line = 0.121212
line = 1.222312
line = 0
line = 0.121215
line = 0.121454
line = 0.345456
line = 0
line = 0.078444


Bonne chance

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 58869 internautes nous ont dit merci ce mois-ci

dino.adnane
Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
-
Merci beaucoup pour votre aide
mamiemando
Messages postés
28955
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 août 2019
6621 -
De rien, bonne continuation :-)