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()

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

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

11
line.strip() == ''

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

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

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.