0

ファイルから行ごとにテキストを読み取る PYTHON 内のプログラムの 1 つに、コマンド ライン プログレス バーを実装したいと考えています。

プログレス スケールは、次の 2 つの方法のいずれかで実装できます。

  1. (行数 / 総行数) または
  2. (完了したバイト数 / 合計バイト数)

どちらでも"number of lines"かまいませんが、 の値を取得するためだけに、ドキュメント全体 (非常に大きくなる可能性があります) をループする必要があるようです"total lines"

これは非常に非効率に思えます。私は既成概念にとらわれず、おそらくファイルのサイズを取得して (より簡単に取得できますか?)、読み取られたバイト数を追跡​​すれば、適切な進行状況バー メトリックになるのではないかと考えました。

os.path.getsize(file)またはを使用os.stat(file).st_sizeしてファイルのサイズを取得できますが、 によって読み取られたバイト数を追跡​​する方法をまだ見つけていませんreadline()。私が作業しているファイルは、ASCII、またはおそらく Unicode でエンコードする必要があるため、使用するエンコードを決定し、読み取った文字数または使用した文字数、または読み取った各行の関数を記録するos.getsizeof()必要len()がありますか?

ここで問題が発生することは間違いありません。助言がありますか?

(PS - 一度に読み取るバイト数を手動で入力してもうまくいかないと思います。各行を個別に処理する必要があるためです。そうしないと、後で「\n」で分割する必要があります。 )

4

1 に答える 1

1
bytesread = 0
while True:
  line = fh.readline()
  if line == '':
    break
  bytesread += len(line)

または、少し短い:

bytesread = 0
for line in fh:
  bytesread += len(line)

os.path.getsize()(または)を使用os.statすると、ファイルサイズを効率的に決定できます。

于 2013-01-20T11:24:50.680 に答える