comment faire pour compter le nombre total de lignes dans un fichier texte à l'aide de python
Par exemple, si mon fichier texte est:
blue
green
yellow
black
Ici il y a quatre lignes, et maintenant je veux obtenir le résultat que quatre. Comment puis-je le faire?
- open('data.txt') en tant que fp: pour ligne dans fp: si ligne.strip(): compteur += 1
- ça va fonctionner.?
- Oui, il fonctionne, mais la solution n'est pas pythonic, de mieux utiliser les
sum()
. - stackoverflow.com/questions/845058/... c'est plus qu'assez d'explication 😉
- Double Possible de Comment obtenir le nombre de lignes à bas prix en Python?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
sum()
avec un générateur d'expression:Notez que vous ne pouvez pas utiliser
len(f)
, depuisf
est un itérateur._
est une variable spéciale nom pour jeter de variables, voir Quel est le but de l'unique trait de soulignement "_" variable en Python?.Vous pouvez utiliser
len(f.readlines())
, mais cela va créer une liste supplémentaire dans la mémoire, qui n'a même pas de travailler sur de gros fichiers qui ne rentrent pas dans la mémoire.sum(1 for _ in f)
parce qu'il utilise implicitement un générateur d'expression entre parenthèses et ne pas créer une liste de 1s. Cependant, votre versionsum([1 for _ in f])
serait de créer une liste de 1s avant en faisant la somme, qui alloue de la mémoire inutilement.Ce lien (Comment obtenir le nombre de lignes à bas prix en Python?) a beaucoup de solutions possibles, mais ils ont tous l'ignorent un moyen de faire courir beaucoup plus vite, à savoir à l'aide de la mémoire sans tampon (cru) de l'interface, à l'aide de bytearrays, et de faire votre propre mise en mémoire tampon.
À l'aide d'une version modifiée de l'outil timing, je crois que le code suivant est plus rapide (et un peu plus pythonic) que toutes les solutions proposées:
Voici mes horaires:
Je post ici, mais je suis relativement nouveau utilisateur de la pile d'échange et de ne pas les qualités de la manne.
EDIT:
Cela peut être fait entièrement avec des générateurs d'expressions en ligne en utilisant itertools, mais c'est assez bizarre à la recherche:
return sum(map(methodcaller("count", b'\n'), f_gen))
, l'importationmethodcaller
deoperator
aider à accélérer le processus tout ('imap
deitertools
ainsi si python2)? Je voudrais également constify la1024*1024
mathématiques à économiser quelques cycles. Voudrais voir la comparaison avec le deuxième exemple ainsi.Vous pouvez utiliser
sum()
avec un générateur d'expression ici. Le générateur d'expression sera[1, 1, ...]
jusqu'à la longueur du fichier. Ensuite, nous appelonssum()
afin de les ajouter tous ensemble, pour obtenir le nombre total d'.Il semble que par ce que vous avez essayé, vous ne voulez pas inclure des lignes vides. Vous pouvez alors:
Un liner:
Utilisation:
Qui fonctionne.
Pour les gens de dire d'utiliser
with open ("filename.txt","r") as f
vous pouvez faireanyname = open("filename.txt","r")
ce qui donne le pas.de lignes dans un fichier.
voici comment vous pouvez le faire par le biais de compréhension de liste, mais cela va gaspiller un peu de la mémoire de votre ordinateur en ligne.strip() a été appelé deux fois.
Je ne suis pas nouvelle à stackoverflow, n'a jamais eu un compte et, habituellement, est venu ici pour avoir des réponses. Je ne peux pas commenter ou voter encore de réponse. MAIS je voulais dire que le code de Michael Bacon ci-dessus fonctionne vraiment bien. Je suis nouveau sur Python, mais pas à la programmation. J'ai lu Python Crash course et il y a quelques choses que je voulais faire pour briser la lecture d'un couvert à l'approche. Un utilitaire qui a utilise à partir d'un ETL ou même la qualité des données du point de vue serait de saisir le nombre de lignes d'un fichier indépendamment de tout ETL. Le fichier a X nombre de lignes, vous devez l'importer dans SQL ou Hadoop et vous vous retrouvez avec X le nombre de lignes. Vous pouvez valider au niveau le plus bas le nombre de lignes d'un fichier raw.
J'ai été jouer avec son code et en faisant quelques tests, et ce code est très efficace jusqu'à présent. J'ai créé plusieurs fichiers CSV, différentes tailles, et du nombre de lignes. Vous pouvez voir mon code ci-dessous et mes commentaires fournir à la fois et les détails. Le code de Michael Bacon, à condition de pistes environ 6 fois plus vite que la normale Python méthode de la juste en boucle les lignes.
Espère que cela aide quelqu'un.
si vous importez
pandas
ensuite, vous pouvez utiliser leforme
fonction à déterminer. Vous ne savez pas comment il se comporte. Le Code est comme suit: