質問: read_row.rstrip("\n") print("output=" + read_row_original) print("No." + sum_col + " is finished") ``` inputは1,2,3..と変わり、outputも1,2,3..と変わっていくはずですが、ずっと1のままです。outputも1,2,3..と変えていくためにはどう修正すればよいのでしょうか? よろしくお願いいたします。
回答: linecache.getline() は、すでにキャッシュされている場合にその値を返すので、ファイルを更新しても最初に取得した値(output=1)を返し続けます。 今回のように元のファイルが変更される場合は、linecache.checkcache() でチェックすれば、ファイルの更新を検出しキャッシュがクリアされるはずなのですが、環境や使い方によってはうまく動きません。 日時を秒単位でしか扱えないOS・ファイルシステム上で、上記サンプルコードのように短時間にファイルの読み書きを激しく行うと、 * ファイル名:"sum_col_data.txt" 更新日時:"2017-02-14 19:30:00" * ファイル名:"sum_col_data.txt" 更新日時:"2017-02-14 19:30:00" * ファイル名:"sum_col_data.txt" 更新日時:"2017-02-14 19:30:00" * ・・・ とまるでファイルが更新されていないように見えてしまい、結果キャッシュの更新が行われません。 linecache.clearcache() を実行し、その都度キャッシュをクリアすれば意図した動作をしますが、それではキャッシュの意味がまるでありません。 そもそも linecache は変更されない大きなテキストファイルの一部を取り出すためのモジュールです。やりたい事に対して linecache を使うのが適切がどうか、まず検討してみると良いと思います。