FONCTION COMPTER LE NOMBRE DE LIGNE

lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 - 3 févr. 2009 à 11:07
Clempython Messages postés 9 Date d'inscription samedi 26 décembre 2009 Statut Membre Dernière intervention 29 mars 2011 - 3 janv. 2010 à 01:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49154-fonction-compter-le-nombre-de-ligne

Clempython Messages postés 9 Date d'inscription samedi 26 décembre 2009 Statut Membre Dernière intervention 29 mars 2011 17
3 janv. 2010 à 01:50
#la même chose en 10 fois plus court et rapide:

Liste = file("release_249.txt",'r')
lignes = Liste.readlines()
print len(lignes)
cs_Skami18 Messages postés 1 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 12 juillet 2009
12 juil. 2009 à 13:23
Wééé super!
C'est pile ce qu'il me falait!
Merci :-)
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 mars 2009 à 00:08
cette source n'est pas tres interessante, néamoins, je comprends parfaitement qu'on ait envie de poster ses premiers codes, encore faudrait il qu'ils soient justes, je ne reviens pas sur les erreurs précédement expliquées. Tout de meme c'est beaucoup pour un code aussi simple, j'en ajoute une, tu ne refermes pas le fichier et utilise plutot open que file.
freecrazy Messages postés 1 Date d'inscription vendredi 5 août 2005 Statut Membre Dernière intervention 1 mars 2009
1 mars 2009 à 11:04
Ces petits bouts de code, pour des petits pb sont toujours intéressants.
La différence de 1 vient simplement de l'initialisation de i=1 alors qu'on ne sait pas encore s'il y a une ligne ou non. Il faut l'initialiser à 0. D'ailleurs pour être "logique" jusqu'au bout je mettrai le i+=1 juste après le while.
Le gain de temps est impressionnant !
Cordialement
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
3 févr. 2009 à 15:03
la différence de 1 entre les 2 nombres de lignes vient du fait que la dernière ligne est vide
enfin c'est ce que je pense
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
3 févr. 2009 à 11:34
effectivement :D je te remercie !!! le temps de traitement est divisé par 4 :
import os, time

def countLigne(fichier):

Liste=file(fichier,'r')
i=1
Ligne=Liste.readline()
# "Tant que la ligne n'est pas egale a "" "
# ==> tant qu'on est pas arrive a la fin
while Ligne!="":
#on lit une ligne
Ligne=Liste.readline()
#on ajoute 1 a notre competeur
i+=1
#on retourne le compteur
return i

def countLigne2(fichier):
for i, ligne in enumerate(open(fichier,'r')):
pass
i += 1
return i

a = time.clock()
print countLigne(fichier)
b= time.clock()-a
print b

a = time.clock()
print countLigne2(fichier)
b= time.clock()-a
print b

Resultats :

1448915
2.49478299616
1448914
0.653769124288

Je dois en conclure que pour ce type d'itération on préfèrera une boucle "for" ?
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
3 févr. 2009 à 11:07
Bonjour,
1)
Utiliser "readlines" au lieu de "readline". La méthode "readlines" renvoie toutes les lignes du fichier dans une liste.
Il ne reste plus qu'a appliquer la méthode "len(liste)" pour obtenir le nombre d'éléments de la liste donc le nombre d'enregistrements du fichier.
Exemple
# -*- coding: ISO-8859-15 -*-
import os , time
# FONCTION RENVOYANT LE NOMBRE DE LIGNES D'UN FICHIER TEXTE
def countLigne(fichier):
Liste=file(fichier,'r')
## i=1
i=Liste.readlines()

## # "Tant que la ligne n'est pas égale à "" "
## # ==> tant qu'on est pas arrivé à la fin
## while Ligne!="":
## #on lit une ligne
## Ligne=Liste.readline()
## #on ajoute 1 à notre compteur
## i+=1
#on retourne le compteur

return i
#on note que sous windows le symbole "" doit etre doublé quand il y a certains caractères

2)La mème chose avec une écriture plus pythonesque
i = len(open(fichier,'r').readlines())
print "nb_lignes",i

L'inconvénient de cette méthode est que le fichier est chargé totalement en mémoire.

3)N'ayant pas sous la main un fichier de plus d'un million d'enregistrements pour faire des tests, je joins un exemple tiré d'un livre "Python par l'exemple (O'Reilly)", réputé plus rapide et adapté pour de très gros fichiers.

for i, ligne in enumerate(open(fichier,'r')):
pass
i += 1
print "nb_lignes",i

Le fichier est lu ligne par ligne dans une boucle "for"
Le compteur "i" est incrémenté par la méthode "enumerate"
La méthode "enumerate" enumère de 0 a n c'est la raison pour laquelle on fait i += 1

Alors bons tests.
Cordialement.
Rejoignez-nous