else if の書き方
演算子に続いて忘れるのが if文。ifが違うことはないが else if が微妙に違う。
Cで書けばこうだ。
if (条件) { やること } else if (次の条件) { やること } else { やること }
else if である。これは慣れてるのでわかりやすいと思ってる。C# も Java も同様である。
しかしPythonでは以下のように書く。
if 条件: やること elif 次の条件: やること else: やること
elif である。略し方がPythonっぽい気もする。
Perlになると以下である。
if (条件) { やること } elsif (次の条件) { やること } else { やること }
Rubyは以下
if 条件 then やること elsif 次の条件 then やること else やること end
elsif である。Pythonを見たあとだと略し方に覚悟が足りない。
PHPにいたっては、
if (条件) { やること } elseif (次の条件) { やること } else { やること }
と空白がないだけである。
Visual Basic も似てる。
If 条件 then やること Elseif 次の条件 then やること Else やること End if
Pythonは elif Pythonは elif Pythonは elif Pythonは elif...
と10回唱えて覚える。
バッファフラッシュ
あるファイルの更新状況を一時的に監視したかったので、以下のプログラムを書いてみた。
import time while 1: # ここでファイルの監視 print '結果の表示' time.sleep(60)
シェルから
% ./check.py
と実行したら問題はないものの、
% ./check.py > log.txt &
とバックグランドでログに出力しようとしたら、時々まとめて書き出されるので tail -f とかで見ても見づらい。
import time, sys while 1: # ここでファイルの監視 print '結果の表示' sys.stdout.flush() time.sleep(60)
と毎回バッファフラッシュしてやればいいようだ。
chopはどうやる?
Pythonには文字列の最後の文字を切り落す Perl で言うところの chop がないようだ。ファイルから1行読むと行末の改行コードがついてくるので落したい。
line = line[:-1]
という、文字列頭から終りのひとつ前までという表現で切りとればいいようだ。
追記
strip() というメソッドがあった。通常は空白と改行を取り除く、引数に文字群を与えるとその文字群に該当する文字をすべて取り除く。strip()は文字列の両端、lstrip()は文字列先頭、rstrip()は文字列の後ろとなる。
>>> " ABC123 ".strip() 'ABC123' >>> " ABC123 \n".strip() 'ABC123' >>> " ABC123 \n".strip("\n\r") 'ABC123 ' >>> " ABC123 \r\n".rstrip("\n\r") ' ABC123 '
こんな感じ