157:ファイルの行数を数える
ファイルの行数を数えるにはファイルオブジェクトを for 文でまわして、何回ループしたかを数えます。
>>> i = -1 >>> for line in open(u'157_ファイルの行数を数える.txt'): ... i += 1 ... >>> i += 1 >>> i
より Python らしく書くには enumerate を用いるとよいでしょう。
>>> i = -1 >>> for i, line in enumerate(open(u'157_ファイルの行数を数える.txt')): ... pass ... else: ... i += 1 ... >>> i 82
関数にまとめると次のようになります。
def countline(path):
u"""path ファイルの行数を数える"""
with open(path) as f:
i = -1
for i, line in enumerate(f):
pass
else:
i += 1
return i
別解: すべて読み込んでから数える
ファイルをすべて readlines メソッドで読み込んでしまう方法もあります。行ごとに分割されたリストが得られるのでこれを len 関数で処理します。
>>> lines = open(u'157_ファイルの行数を数える.txt').readlines() >>> len(lines) 82
おまけ: イテレート可能オブジェクトの要素数を数える
前述の countline 関数を眺めると、この関数は「ファイルを開く機能」と「イテレート可能オブジェクトの要素数を数える」機能からできていることがわかります。これは分けることができます。
def len_iter(iterable):
u"""iterable の要素数を数える"""
try:
return len(iterable)
except TypeError:
pass
# len も iter も動作しなかった場合、ここで例外が送出される
it = iter(iterable)
i = -1
for i, line in enumerate(it):
pass
else:
i += 1
return i
def countline(path):
u"""path ファイルの行数を数える"""
with open(path) as f:
i = len_iter(f)
return i