ついさっき、自分が昔書いたコードを見直していた時に、
try:
with log_path.open(encoding='utf-8') as log_file:
for line in log_file.readlines():
...
のようなコードをあちこちで書いていたことに気がつきました。
Python (注:バージョン2.4以降)のファイルハンドルはイテレーターですので、上記のコードの
for line in log_file.readlines():
の行は、
for line in log_file:
と書くべきですね。
enumerate()
と組み合わせる場合も、
for line_number, line in enumerate(log_file.readlines(), 1):
ではなく、
for line_number, line in enumerate(log_file, 1):
と書いて問題ありません。
もし何らかの事情でどうしても readlines()
メソッドを使ってファイルを一気に読み込みたい場合は、for
文に readlines()
を書くのではなく、
log_lines = []
try:
with log_path.open(encoding='utf-8') as log_file:
log_lines = log_file.readlines()
except IOError:
pass
for line in log_lines:
...
のように書くべきだと思います。
with
ブロックがやたらと長いコードをたまに見かけますが、開いたファイルは必要がなければとっとと閉じるべきですし、with
ブロックにスコープはありませんので、不要な処理をだらだら書かずにとっとと抜けましょうということですね。
以上、自分のコードのダメさ加減にかなりヘコんだので、自戒を込めた書いた Tips でした。