python: cara memeriksa apakah suatu baris adalah baris kosong

87

Mencoba mencari cara untuk menulis siklus if untuk memeriksa apakah sebuah baris kosong.

File tersebut memiliki banyak string, dan salah satunya adalah baris kosong untuk memisahkan dari pernyataan lain (bukan a ""; apakah carriage return diikuti oleh carriage return lain menurut saya)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Karena saya menggunakan modul input file, apakah ada cara untuk memeriksa apakah suatu baris kosong?

Menggunakan kode ini sepertinya berhasil, terima kasih semuanya!

for line in x:

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

x.close()
pengguna1006198
sumber

Jawaban:

131

Jika Anda ingin mengabaikan baris dengan hanya spasi:

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

String kosong adalah nilai False.

Atau jika Anda benar-benar hanya menginginkan baris kosong:

if line in ['\n', '\r\n']:
    ... do  something
retracile
sumber
yang kedua melakukan apa yang ada dalam pikiran saya, Terima kasih! jika baris dalam ['\ n']:
user1006198
1
Jika Anda hanya menggunakan if line in ['\n'], Anda harus menggantinya dengan if line == '\n'.
Andrew Clark
8
Saya ingin menunjukkan bahwa jawaban yang diterima, memiliki kesalahan: if line.strip (): ... #melakukan sesuatu mengabaikan baris dengan spasi, tab dan baris kosong. Itulah mengapa hanya yang kedua yang berfungsi untuk poster asli: kata 'tidak' harus dihilangkan.
niefpaarschoenen
4
jika tidak line.strip (): ... lakukan sesuatu. Bukankah seharusnya itu dilanjutkan? karena jika bukan line.strip () sebenarnya berarti baris itu kosong sehingga tidak ada yang bisa dilucuti darinya, maka abaikan atau lanjutkan. Bagian pertama bukan line.strip () menangkap semua baris kosong
Dhiwakar Ravikumar
1
Apakah akan lebih bersih untuk digunakan os.linesepdaripada ['\n', '\r\n']?
Shawn
26

Saya menggunakan kode berikut untuk menguji baris kosong dengan atau tanpa spasi.

if len(line.strip()) == 0 :
    # do something with empty line
bevardgisuser.dll
sumber
11
line.strip() == ''

Atau, jika Anda tidak ingin "memakan" baris yang terdiri dari spasi:

line in ('\n', '\r\n')
Fred Foo
sumber
1
Dalam contoh kedua Anda mungkin juga ingin memeriksa untuk \r\nmemperhitungkan akhiran baris gaya Windows (CRLF)
poplitea
lupa menyebutkan bahwa ini berjalan pada mesin Unix, jadi ia menggunakan baris baru tanpa \ r. Sudah mencobanya tetapi tidak berhasil, apa yang berhasil untuk saya: jika baris ['\ n']: (tidak ada petunjuk mengapa baris == "\ n" tidak berfungsi)
user1006198
1
@ user1006198: jika Anda hanya memeriksa \n, maka line == '\n'lebih baik. Anda mungkin harus mencobanya lagi dan mencari tahu apa masalah Anda.
retracile
@ user1006198: (1) Membaca file teks buatan Windows di Unix akan memberi tahu Anda \r\njika Anda tidak menggunakan mode='rU'(2) Dapatkan petunjuk: print repr(line)dan jika itu tidak memberikan petunjuk, beri tahu kami apa yang "tidak berhasil" berarti bagimu.
John Machin
Satu-satunya penjelasan yang saya miliki adalah bahwa mungkin input file melakukan sesuatu untuk setiap baris, karena ketika saya melakukan perbandingan baris dengan == saya tidak menekan pernyataan (mencetak string untuk melihat apakah saya menekan baris kosong , dan dengan == tidak pernah mencetak baris debug, sementara itu melakukannya ketika saya menggunakan "if line in").
user1006198
2

Anda harus membuka file teks menggunakan rUagar baris baru diubah dengan benar, lihat http://docs.python.org/library/functions.html#open . Dengan cara ini tidak perlu memeriksa \r\n.

hochl
sumber
mencoba buka tetapi saya menemukan input file lebih cocok untuk kasus saya
user1006198
5
Perlu juga dicatat bahwa Uargumen tidak didukung di python3.
jtwilson
1

Saya pikir lebih tepat untuk menggunakan ekspresi reguler:

import re

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

Ini akan cocok di Windows / unix. Selain itu, jika Anda tidak yakin tentang baris yang hanya berisi karakter spasi, Anda dapat menggunakannya '\s*\r?\n'sebagai ekspresi

alemol
sumber