私が行っている演習では、メソッドを使用して特定のファイルの内容を 2 回読み取ろうとしていますread()
。不思議なことに、2 回目に呼び出したときに、ファイルの内容が文字列として返されないようです。
コードはこちら
f = f.open()
# get the year
match = re.search(r'Popularity in (\d+)', f.read())
if match:
print match.group(1)
# get all the names
matches = re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>', f.read())
if matches:
# matches is always None
もちろん、これが最も効率的でも最善の方法でもないことはわかっていますが、それはここでのポイントではありません。ポイントは、なぜread()
2 回呼び出すことができないのかということです。ファイル ハンドルをリセットする必要がありますか? または、それを行うにはファイルを閉じて再度開く必要がありますか?
ベストアンサー1
を呼び出すとread()
、ファイル全体が読み取られ、読み取りカーソルがファイルの末尾に残ります (これ以上読み取るものはありません)。一度に特定の行数を読み取る場合は、 を使用するかreadline()
、readlines()
で行を反復処理しますfor line in handle:
。
質問に直接答えると、ファイルが読み込まれたら、を使用して読み取りカーソルをファイルの先頭に戻すことread()
ができます(ドキュメントはseek(0)
ここ)。ファイルが大きすぎないことが分かっている場合は、read()
出力を変数に保存し、それをfindall
式で使用することもできます。
Ps. 作業が終わったらファイルを閉じるのを忘れないでください。