Traitement d'un fichier texte par python

Résolu/Fermé
dino.adnane Messages postés 11 Date d'inscription lundi 7 mai 2018 Statut Membre Dernière intervention 23 mai 2018 - Modifié le 23 mai 2018 à 10:31
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 24 mai 2018 à 08:03
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

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 23 mai 2018 à 10:39
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
dino.adnane Messages postés 11 Date d'inscription lundi 7 mai 2018 Statut Membre Dernière intervention 23 mai 2018
23 mai 2018 à 15:12
Merci beaucoup pour votre aide
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
24 mai 2018 à 08:03
De rien, bonne continuation :-)
0