1. ホーム
  2. python

[解決済み] 開いているファイルに対して、read()を2回呼び出せないのはなぜですか?

2022-09-26 18:35:42

質問

今やっている演習で、与えられたファイルの内容を read() メソッドを使用して、指定されたファイルの内容を 2 回読み取ろうとしています。不思議なことに、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 回呼び出すことができないのか、ということです。ファイルハンドルをリセットしなければならないのでしょうか?または、それを行うためにファイルを閉じたり開いたりする必要がありますか?

どのように解決するのですか?

呼び出し read() を呼び出すと、ファイル全体を読み込んで、 読み込みカーソルをファイルの最後に残します (これ以上読み込むものがない状態です)。もし、一度に特定の行数だけ読み込みたい場合は readline() , readlines() である行を反復して表示したり for line in handle: .

質問に直接答えるなら、ファイルが読み込まれた後に read() を使用することができます。 seek(0) を使うと、読み込みカーソルをファイルの先頭に戻すことができます (docs は ここで ). ファイルがあまり大きくならないことが分かっている場合は、ファイル中の read() の出力を変数に保存し、それを findall の式で使うことができます。

Ps. 使い終わったら、ファイルを閉じるのを忘れないでください。