4 votes

est-il possible de déterminer combien de lignes existent dans un fichier sans itération par ligne ?

Duplicata possible :
Comment obtenir le nombre de lignes à moindre coût en Python ?

Bonjour, j'ai du code ci-dessous, qui implémente la lecture de fichiers par ligne et l'itération du compteur.

def __set_quantity_filled_lines_in_file(self):
    count = 0
    with open(self.filename, 'r') as f:
        for line in f:
             count += 1
    return count

Ma question est la suivante : existe-t-il des méthodes permettant de déterminer le nombre de lignes de données textuelles dans le fichier actuel sans itération par ligne ?

Merci !

5voto

Li-aung Yip Points 7209

En général il n'est pas possible de faire mieux que de lire chaque caractère du fichier et de compter les caractères de nouvelle ligne.

Cela peut être possible si vous connaissez les détails de la structure interne du fichier. Par exemple, si le fichier fait 1024 ko et que chaque ligne fait 1 ko, vous pouvez en déduire qu'il y a 1024 lignes dans le fichier.

3voto

user845279 Points 2504

Je ne sais pas si Python possède cette fonction ou non, j'en doute fortement, mais cela nécessiterait essentiellement de lire l'ensemble du fichier. Un saut de ligne est signifié par le caractère \n (qui dépend en fait du système). Il n'y a donc aucun moyen de savoir combien de ces caractères existent dans un fichier sans parcourir tout le fichier.

1voto

ThiefMaster Points 135805

Non, ces informations ne peuvent être récupérées qu'en itérant sur l'ensemble du contenu du fichier (ou en lisant l'ensemble du fichier en mémoire). Mais à moins d'être sûr que les fichiers seront toujours petits, il vaut mieux ne pas penser à faire cela).

Même si vous ne boucle pas sur le contenu du fichier, les fonctions que vous appelez le font. Par exemple, len(f.readlines()) lira le ensemble du site dans une liste juste pour compter le nombre d'éléments. C'est terriblement inefficace puisque vous n'avez pas du tout besoin de stocker le contenu du fichier.

1voto

Jason Morgan Points 864

Vous pourriez utiliser le readlines() et c'est probablement la méthode la plus simple.

Si vous voulez être différent, vous pouvez utiliser l'option lire() pour obtenir le fichier entier et compter les combinaisons de caractères CR, LF, CRLR LFCR en utilisant la fonction membre collections.Counter clase.
Cependant, vous devrez faire face aux différentes manières de terminer les lignes.
Quelque chose comme :

import collections
f=open("myfile","rb")
d=f.read()
f.close()
c=collections.Counter(d)
lines1=c['\r\n']
lines2=c['\n\r']
lines3=c['\r']-lines1-lines2
lines4=c['\n']-lines1-lines2
nlines=lines3+lines4

0voto

Deva Points 11

Ceci donne la réponse, mais lit le fichier entier et stocke les lignes dans une liste

    len(f.readlines())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X