Python:行が空の行であるかどうかを確認する方法


86

行が空かどうかを確認するためにifサイクルを作成する方法を理解しようとしています。

ファイルには多くの文字列があり、そのうちの1つは他のステートメントと区別するための空白行""です(;ではなく、キャリッジリターンの後に別のキャリッジリターンが続くと思います)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

ファイル入力モジュールを使用しているので、行が空かどうかを確認する方法はありますか?

このコードを使用すると、うまくいくようです、みんなありがとう!

for line in x:

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

x.close()

回答:


128

空白のみの行を無視する場合:

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

空の文字列はFalse値です。

または、本当に空の行だけが必要な場合:

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

2つ目は、私が考えていたことを実行します。ありがとう!['\ n']の行の場合:
user1006198 2011年

1
のみを使用if line in ['\n']している場合は、それをif line == '\n'。に置き換える必要があります。
アンドリュークラーク

7
受け入れられた答えにエラーがあることを指摘したいと思います:if line.strip():... #do何かが空白のある行、つまりスペース、タブ、空の行を無視します。そのため、元のポスターでは2番目のポスターのみが機能しました。「not」を削除する必要があります。
niefpaarschoenen 2013年

3
line.strip()でない場合:...何かをします。代わりに続けるべきではありませんか?line.strip()でない場合、実際には行が空であることを意味するため、行から何も削除できないため、無視するか続行します。line.strip()ではない最初の部分がすべての空の行をキャッチ
Dhiwakar Ravikumar 2015

1
os.linesep代わりに使用する方がクリーンでしょう['\n', '\r\n']か?
ショーン

24

次のコードを使用して、空白の有無にかかわらず空の行をテストします。

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

11
line.strip() == ''

または、スペースで構成される行を「食い尽くす」必要がない場合:

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

1
2番目のサンプルでは\r\n、Windowsスタイルの行末(CRLF)を考慮してチェックすることもできます
poplitea

これはUnixマシンで実行されていることを忘れたため、\ rなしで改行を使用します。試してみましたが、機能しませんでした。何が機能しているのでしょうか。['\ n']の行の場合:(行== "\ n"が機能しない理由は
わかり

1
@ user1006198:あなただけのためにチェックしている場合は\n、そのline == '\n'方が良いです。おそらくもう一度試して、問題が何であったかを理解する必要があります。
retracile 2011年

@ user1006198:(1)UnixでWindowsで作成されたテキストファイルを読むと、\r\n使用していない場合に表示されますmode='rU'(2)手がかりを取得します:print repr(line)それでも手がかりが得られない場合は、「機能しない」ものを正確に教えてくださいあなたにとって意味します。
ジョンマチン2011年

私が持っている唯一の説明は、おそらくファイル入力が各行に何かをするということです。なぜなら、行を==と比較するとき、ステートメントにヒットしないからです(空白行にヒットするかどうかを確認するために文字列を出力します) 、および==を使用すると、デバッグ行は出力されませんが、「if行入力」を使用すると出力されます)。
user1006198 2011年

2

rU改行が適切に変換されるように、を使用してテキストファイルを開く必要があります。http://docs.python.org/library/functions.html#openを参照してください。このように、をチェックする必要はありません\r\n


開いてみましたが、ファイル入力が私の場合により適していることが
わかりました

4
U引数はpython3ではサポートされていないことにも注意してください。
jtwilson

1

正規表現を使用する方が堅牢だと思います。

import re

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

これはWindows / unixで一致します。さらに、スペース文字のみを含む行がわからない場合は'\s*\r?\n'、式として使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.