Pages : 1
#1 Le 07/07/2017, à 08:24
- paul18
[résolu] problème avec Readline()
Bonjour,
Désolé si ma question est triviale, mais je suis bloqué dessus depuis des heures & tous les exemples trouvés (idem dans les docs) fonctionnent pour le parcours complet d'un fichier.
Mon problème : je cherche à enregistrer la valeur sur la ligne juste après ##begin, mais de de toute évidence lors de son appel, readline() démarre au début du fichier (je n'ai donc pas compris son fonctionnement)
Une remarque : de gros fichiers textes à traiter, donc readlines() est à éviter (testé :-) )
Merci par avance pour toute suggestion
Paul
fichier ascii :
999
0
0
0
0
0
0
0
0
0
0
##BEGIN
42
1
6
12
47
2
46
3
51
Mon bout de code :
import time, sys, os
#from astropy.io import ascii
import itertools
import numpy as np
PATH = str(os.path.abspath(''))
input_file_name ='/tmp.txt'
## check if the file exists, then if it's empty or not
if (os.path.isfile(PATH + input_file_name)):
if (os.stat(PATH + input_file_name).st_size > 0):
## go through the file in order to find specific sentences
## specific blocks will be defined afterward
Block_position = []; j=0;
with open(PATH + input_file_name, "r") as data:
for line in data:
if '##BEGIN' in line:
Block_position.append(j)
j=j+1
with open(PATH + input_file_name, "r") as data:
TotalNumberOfLines = os.path.getsize(PATH + input_file_name)
for j in range(TotalNumberOfLines):
print ("j = ",j)
if (j is (Block_position[0]+1)):
print( "je suis dedans\n"); print(j)
NumberOfNodes = int(data.readline()[:-1])
j = j+1
else:
print "The file %s is empty : post-processing cannot be performed !!!\n" % input_file_name
else:
print "Error : the file %s does not exist: post-processing stops !!!\n" % input_file_name
Dernière modification par paul18 (Le 07/07/2017, à 11:02)
Hors ligne
#2 Le 07/07/2017, à 08:53
- paul18
Re : [résolu] problème avec Readline()
je suis tombé sur itertools.islice(), mais ça répond partiellement à mon besoin; avec readline() je cherche à récupérer la valeur et directement l'écrire dans un fichier texte (sans charger un bloc complet en mémoire)
NumberOfNodes = int(next(itertools.islice(data,Node_position[0]+1,Node_position[0]+2),None))
Hors ligne
#3 Le 07/07/2017, à 09:01
- pingouinux
Re : [résolu] problème avec Readline()
Bonjour,
Ton problème vient de ce que tu n'appelles data.readline() que lorsque tu arrives à j==12. Tu ne lis donc que la première ligne.
Ce que tu fais est beaucoup trop compliqué. Je ferais simplement ceci :
with open(PATH + input_file_name, "r") as data:
while True:
line=data.readline()
if line=='': break
if '##BEGIN' in line:
NumberOfNodes = int(data.readline()[:-1])
print( NumberOfNodes);
Hors ligne
#4 Le 07/07/2017, à 09:31
- paul18
Re : [résolu] problème avec Readline()
évidemment ça fonctionne, mais je suis perdu car dans mon esprit on est sur la ligne ###begin (avec if) et je n'arrive pas à comprendre qu'on enregistre la ligne suivante (????)
bon il y a plus de choses à revoir que je n'imaginais
Merci pour l'information
Paul
Hors ligne
#5 Le 07/07/2017, à 09:35
- pingouinux
Re : [résolu] problème avec Readline()
évidemment ça fonctionne, mais je suis perdu car dans mon esprit on est sur la ligne ###begin (avec if) et je n'arrive pas à comprendre qu'on enregistre la ligne suivante (????)
Quand on lit une ligne contenant '##BEGIN', on fait un data.readline() pour lire la ligne suivante.
if '##BEGIN' in line:
NumberOfNodes = int(data.readline()[:-1])
Hors ligne
#6 Le 07/07/2017, à 11:03
- paul18
Re : [résolu] problème avec Readline()
@pinguinux: un grand merci ; c'est parfois dans la douleur qu'on apprend les choses
j'ai avancé d'un grand pas
Paul
Hors ligne