python: bir satırın boş bir satır olup olmadığı nasıl kontrol edilir


87

Bir satırın boş olup olmadığını kontrol etmek için nasıl bir if döngüsü yazılacağını anlamaya çalışıyorum.

Dosyada birçok dizge var ve bunlardan biri diğer ifadelerden ayırmak için boş bir satırdır (a değil ""; bir satırbaşı ve ardından başka bir satır başı olduğunu düşünüyorum)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Dosya giriş modülünü kullandığım için, bir satırın boş olup olmadığını kontrol etmenin bir yolu var mı?

Bu kodu kullanarak işe yarıyor gibi görünüyor, herkese teşekkürler!

for line in x:

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

x.close()

Yanıtlar:


132

Yalnızca boşluk içeren satırları yok saymak istiyorsanız:

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

Boş dize bir Yanlış değerdir.

Veya gerçekten sadece boş satırlar istiyorsanız:

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

ikincisi aklımdaki şeyi yapıyor, Teşekkürler! ['\ n'] satırındaysa:
user1006198

1
Yalnızca kullanıyorsanız if line in ['\n'], bunu ile değiştirmelisiniz if line == '\n'.
Andrew Clark

8
Kabul edilen cevabın bir hatası olduğunu belirtmek isterim: if line.strip (): ... # boşluk, sekme ve boş satır gibi boşluklu satırları yok sayan bir şey yap. Bu yüzden orijinal poster için yalnızca ikincisi işe yaradı: "not" kaldırılmalıdır.
niefpaarschoenen

4
line.strip () değilse: ... bir şeyler yapın. Bunun yerine devam etmesi gerekmez mi? çünkü line.strip () değilse, aslında satırın boş olduğu anlamına gelir, bu nedenle ondan hiçbir şey çıkarılamaz, dolayısıyla yok sayın veya devam edin. İlk kısım line.strip () değil tüm boş satırları yakalıyor
Dhiwakar Ravikumar

1
os.linesepBunun yerine kullanmak daha mı temiz olur ['\n', '\r\n']?
Shawn

26

Boş satırı beyaz boşluklu veya boşluksuz test etmek için aşağıdaki kodu kullanıyorum.

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

11
line.strip() == ''

Veya boşluklardan oluşan satırları "yemek" istemiyorsanız:

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

1
İkinci örnekte muhtemelen \r\nWindows tarzı satır sonlarını (CRLF) hesaba katmak isteyeceksiniz
poplitea

Bunun bir Unix makinesinde çalıştığını söylemeyi unuttum, bu yüzden \ r olmadan satırsonu kullanır. Denedim ama işe yaramadı, benim için ne işe yarıyor: eğer ['\ n'] satırında ise: (== "\ n" satırının neden işe yaramayacağına dair hiçbir ipucu yok)
user1006198

1
@ user1006198: Eğer sadece kontrol ediyorsanız \n, o zaman line == '\n'daha iyidir. Muhtemelen tekrar denemeli ve sorunun ne olduğunu bulmalısın.
çekilebilir

@ user1006198: (1) Unix'te Windows tarafından oluşturulmuş bir metin dosyasını okumak \r\n, kullanmıyorsanız size verecektir mode='rU'(2) Bir ipucu alın: print repr(line)ve bu bir ipucu sağlamıyorsa, bize tam olarak neyin "çalışmadığını" söyleyin senin için anlamı.
John Machin

Sahip olduğum tek açıklama, muhtemelen dosya girişinin her satıra bir şey yapmasıdır, çünkü satırın == ile karşılaştırmasını yaptığımda ifadeye çarpmam (boş satıra çarpıp vurmadığımı görmek için bir dize yazdırıyorum ve == ile hata ayıklama satırını asla yazdırmaz, "if satırını" kullandığımda bunu yapar).
user1006198


1

Normal ifadeleri kullanmanın daha sağlam olduğunu düşünüyorum:

import re

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

Bu, Windows / unix'te eşleşir. Ek olarak, sadece boşluk karakteri içeren satırlardan emin değilseniz '\s*\r?\n', ifade olarak kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.