2011-10-25 5 views
55

en essayant de comprendre comment écrire un cycle if pour vérifier si une ligne est vide.python: comment vérifier si une ligne est une ligne vide

Le fichier a plusieurs cordes, et l'un d'entre eux est une ligne vide pour séparer des autres déclarations (et non « », est un retour chariot suivi d'un autre retour chariot, je pense)

new statement 
asdasdasd 
asdasdasdasd 

new statement 
asdasdasdasd 
asdasdasdasd 

Depuis J'utilise le module d'entrée de fichier, est-il un moyen de vérifier si une ligne est vide? En utilisant ce code, cela semble fonctionner, merci à tous!

for line in x: 

    if line == '\n': 
     print "found an end of line" 

x.close() 

Répondre

77

Si vous voulez ignorer les lignes avec seulement des espaces:

if not line.strip(): 
    ... do something 

La chaîne vide est une valeur False.

Ou si vous voulez vraiment que des lignes vides:

if line in ['\n', '\r\n']: 
    ... do something 
+0

le second fait ce que j'avais à l'esprit, merci! si ligne dans ['\ n']: – user1006198

+1

Si vous n'utilisez que 'if line dans [' \ n '] ', remplacez-le par' if ligne ==' \ n''. –

+1

Je tiens à souligner que la réponse acceptée, a une erreur: si line.strip(): ... #do quelque chose ignore les lignes avec des espaces, c'est-à-dire espace, tabulation et ligne vide. C'est pourquoi seul le second a fonctionné pour l'affiche originale: le 'non' doit être retiré. – niefpaarschoenen

9
line.strip() == '' 

Ou, si vous ne voulez pas "manger" lignes comprenant des espaces:

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

Dans le deuxième exemple, vous voudrez probablement vérifier \ r \ n' pour prendre en compte les fins de ligne de style Windows (CRLF) – poplitea

+0

oublié de mentionner que cela fonctionne sur une machine Unix, donc il utilise la nouvelle ligne sans le \ r. Je l'ai essayé mais cela n'a pas fonctionné, ce qui fonctionne pour moi: si la ligne dans ['\ n']: (aucune idée pourquoi la ligne == "\ n" ne fonctionnera pas) – user1006198

+1

@ user1006198: si vous ' re seulement en cherchant '\ n', alors' line == '\ n'' est meilleur. Vous devriez probablement essayer encore et comprendre quel était votre problème. – retracile

12

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

if len(line.strip()) == 0 : 
    # do something with empty line 
1

Je pense est plus robuste à 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 

qui établit une correspondance dans Windows/unix. De plus, si vous n'êtes pas sûr des lignes ne contenant que l'espace char vous pouvez utiliser '\s*\r?\n' comme expression

Questions connexes