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

Signaler
Messages postés
11
Date d'inscription
lundi 7 mai 2018
Statut
Membre
Dernière intervention
23 mai 2018
-
Messages postés
29309
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
10 octobre 2020
-
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

Messages postés
29309
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
10 octobre 2020
6 941
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
Merci

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

CCM 60511 internautes nous ont dit merci ce mois-ci

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

Merci beaucoup pour votre aide
Messages postés
29309
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
10 octobre 2020
6 941
De rien, bonne continuation :-)