103 votes

Python: comment vérifier si une ligne est vide

Essayer de comprendre comment écrire une boucle if pour vérifier si une ligne est vide.

Le fichier a de nombreuses chaînes, et l'une d'entre elles est une ligne vide pour se séparer des autres déclarations (pas un ""; c'est un retour chariot suivi d'un autre retour chariot je pense)

nouvelle déclaration
asdasdasd
asdasdasdasd

nouvelle déclaration
asdasdasdasd
asdasdasdasd

Comme j'utilise le module d'entrée de fichier, y a-t-il un moyen de vérifier si une ligne est vide?

En utilisant ce code, il semble fonctionner, merci à tous!

for line in x:

    if line == '\n':
        print "trouvé une fin de ligne"

x.close()

161voto

retracile Points 6301

Si vous voulez ignorer les lignes contenant uniquement des espaces:

if line.strip():
    ... faire quelque chose

La chaîne vide est une valeur False.

Ou si vous voulez vraiment seulement les lignes vides:

if line in ['\n', '\r\n']:
    ... faire quelque chose

0 votes

Le deuxième fait ce que j'avais en tête, Merci! si la ligne dans ['\n']:

1 votes

Si vous utilisez uniquement if line in ['\n'], vous devez le remplacer par if ligne == '\n'.

9 votes

Je tiens à souligner que la réponse acceptée comporte une erreur : si line.strip() : ... #faire quelque chose ignore les lignes avec des espaces, des tabulations et des lignes vides. C'est pourquoi seule la deuxième a fonctionné pour l'auteur original : le 'not' doit être supprimé.

35voto

bevardgisuser Points 303

J'utilise le code suivant pour tester la ligne vide avec ou sans espaces blancs.

if len(line.strip()) == 0 :
    # faire quelque chose avec la ligne vide

0 votes

# faire quelque chose avec une ligne vide -- > que se passerait-il si je voulais supprimer la ligne ?

12voto

larsmans Points 167484
line.strip() == ''

Ou, si vous ne voulez pas "manger" des lignes composées d'espaces:

line in ('\n', '\r\n')

1 votes

Dans le deuxième exemple, vous voudrez probablement également vérifier pour \r\n pour tenir compte des sauts de ligne de style Windows (CRLF)

0 votes

Oublié de mentionner que cela fonctionne sur une machine Unix, donc cela utilise la nouvelle ligne sans le \r. Ai essayé cela pourtant mais cela n'a pas fonctionné, ce qui fonctionne pour moi : si la ligne est ['\n']: (aucune idée pourquoi la ligne == "\n" ne fonctionnera pas)

1 votes

@user1006198: si vous vérifiez uniquement pour \n, alors ligne == '\n' est mieux. Vous devriez probablement réessayer et comprendre quel était votre problème.

2voto

hochl Points 5353

Vous devriez ouvrir les fichiers texte en utilisant rU afin que les sauts de ligne soient correctement transformés, consultez http://docs.python.org/library/functions.html#open. De cette façon, il n'est pas nécessaire de vérifier pour \r\n.

0 votes

J'ai essayé l'option ouverte mais je trouve que l'entrée de fichier est plus adaptée à mon cas

5 votes

Il convient également de noter que l'argument U n'est pas pris en charge en python3.

2voto

alemol Points 81

Je pense qu'il est plus robuste d'utiliser des expressions régulières :

import re

for i, line in enumerate(content):
    print line if not (re.match('\r?\n', line)) else pass

Cela fonctionnerait sur Windows/unix. De plus, si vous n'êtes pas sûr que les lignes ne contiennent que des caractères d'espace, vous pouvez utiliser '\s*\r?\n' comme expression

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