Traitement d'un fichier texte par python

Résolu
dino.adnane Messages postés 11 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
    2
    1. dino.adnane Messages postés 11 Statut Membre
       
      Merci beaucoup pour votre aide
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
       
      De rien, bonne continuation :-)
      0