python: cách kiểm tra xem một dòng có phải là dòng trống không


86

Đang cố gắng tìm ra cách viết chu kỳ if để kiểm tra xem một dòng có trống không.

Tệp có nhiều chuỗi và một trong số này là dòng trống để tách biệt với các câu lệnh khác (không phải là a ""; tôi nghĩ là một ký tự xuống dòng theo sau bởi một ký tự xuống dòng khác)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Vì tôi đang sử dụng mô-đun nhập tệp, có cách nào để kiểm tra xem có dòng nào trống không?

Sử dụng mã này, nó có vẻ hoạt động, cảm ơn mọi người!

for line in x:

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

x.close()

Câu trả lời:


128

Nếu bạn muốn bỏ qua các dòng chỉ có khoảng trắng:

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

Chuỗi trống là một giá trị Sai.

Hoặc nếu bạn thực sự chỉ muốn các dòng trống:

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

cái thứ hai làm những gì tôi đã nghĩ, Cảm ơn! if dòng trong ['\ n']:
user1006198

1
Nếu bạn chỉ đang sử dụng if line in ['\n'], bạn nên thay thế bằng if line == '\n'.
Andrew Clark

7
Tôi muốn chỉ ra rằng câu trả lời được chấp nhận, có lỗi: if line.strip (): ... #do something bỏ qua các dòng có khoảng trắng tức là khoảng trắng, tab và dòng trống. Đó là lý do tại sao chỉ có cái thứ hai phù hợp với áp phích gốc: chữ 'không' phải bị xóa.
niefpaarschoenen

3
nếu không phải line.strip (): ... làm gì đó. Thay vào đó, nó có nên tiếp tục không? bởi vì nếu không line.strip () thực sự có nghĩa là dòng đó trống nên không thể loại bỏ gì khỏi nó, do đó hãy bỏ qua hoặc tiếp tục. Phần thứ nhất không line.strip () bắt tất cả các dòng sản phẩm nào
Dhiwakar Ravikumar

1
Nó sẽ sạch hơn để sử dụng os.linesepthay vì ['\n', '\r\n']?
Shawn

24

Tôi sử dụng đoạn mã sau để kiểm tra dòng trống có hoặc không có khoảng trắng.

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

11
line.strip() == ''

Hoặc, nếu bạn không muốn "ăn mòn" các dòng bao gồm dấu cách:

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

1
Trong mẫu thứ hai bạn muốn có lẽ cũng như để kiểm tra \r\ntài khoản cho kết thúc dòng Windows-style (CRLF)
poplitea

quên đề cập rằng điều này đang chạy trên máy Unix, vì vậy nó sử dụng dòng mới mà không có \ r. Thử nó ngươi nhưng nó đã không làm việc, những gì đang làm việc cho tôi: nếu dòng trong [ '\ n']: (không có đầu mối tại sao dòng == "\ n" sẽ không làm việc)
user1006198

1
@ user1006198: nếu bạn chỉ đang kiểm tra \n, thì line == '\n'tốt hơn. Bạn có thể nên thử lại và tìm ra vấn đề của bạn là gì.
khôi phục lại

@ user1006198: (1) Đọc tệp văn bản do Windows tạo trên Unix sẽ cung cấp cho bạn \r\nnếu bạn không sử dụng mode='rU'(2) Tìm manh mối: print repr(line)và nếu điều đó không cung cấp manh mối, hãy cho chúng tôi biết chính xác điều gì "không hoạt động" có ý nghĩa với bạn.
John Machin

Lời giải thích duy nhất mà tôi có là có thể đầu vào tệp thực hiện điều gì đó với mỗi dòng, bởi vì khi tôi thực hiện so sánh dòng với dấu == tôi không nhấn câu lệnh (in một chuỗi để xem liệu tôi có nhấn dòng trống không và với dấu ==, nó không bao giờ in dòng gỡ lỗi, trong khi nó thực hiện điều đó khi tôi sử dụng "if line in").
user1006198

2

Bạn nên mở các tệp văn bản bằng cách sử dụng rUđể các dòng mới được chuyển đổi đúng cách, hãy xem http://docs.python.org/library/functions.html#open . Bằng cách này không cần phải kiểm tra \r\n.


cố gắng mở nhưng tôi tìm đầu vào tập tin phù hợp hơn cho trường hợp của tôi
user1006198

5
Cũng cần lưu ý rằng Uđối số không được hỗ trợ trong python3.
jtwilson

1

Tôi nghĩ sử dụng cụm từ thông dụng sẽ hiệu quả hơn:

import re

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

Điều này sẽ phù hợp trong Windows / unix. Ngoài ra, nếu bạn không chắc chắn về các dòng chỉ chứa ký tự khoảng trắng, bạn có thể sử dụng '\s*\r?\n'làm biểu thức

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.