Pythonを使用してディレクトリから単一のファイルを取得するための最も効率的で最速の方法は何ですか?
私の特定の問題の詳細:
事前に生成されたファイルを多数含むディレクトリがあり、ランダムなファイルを選択したいだけです。最初にすべてのファイルを一覧表示する以外に、ディレクトリからランダムなファイルを選択する効率的な方法はないことを知っているので、ファイルはすでにランダムな名前で生成されているため、すでにランダムに並べ替えられています。最初のファイルを選択するだけです。フォルダからのファイル。
だから私の質問は、ディレクトリからファイルのリスト全体をロードすることなく、フォルダから最初のファイルを選択するにはどうすればよいですか(OSにそれを実行させることもできません。私の最適な目標は、OSに私を返すように強制することです。単一のファイルを停止してから停止してください!)。
注:ディレクトリにたくさんのファイルがあるので、1つだけを選択するためにすべてのファイルをリストすることを避けたいのはなぜですか。
注2:各ファイルは1回だけ選択され、次に削除されて、次回は新しいファイルのみが選択されるようにします(したがって、ある種のランダム性が保証されます)。
解決
私はついに、以下を保存するインデックスファイルを使用することを選択しました。
- 選択する現在のファイルのインデックス(例:file1.extの場合は1、file2.extの場合は2など)
- 最後に生成されたファイルのインデックス(例:file1999.extの場合は1999)
もちろん、これは私のファイルがランダムな名前で生成されなくなったことを意味しますが、決定論的な増分可能なパターンを使用します(例: "file%s.ext"%ID)
したがって、2つの主要な操作にほぼ一定の時間があります。
- フォルダ内の次のファイルにアクセスする
- 残っているファイルの数を数えます(必要なときにバックグラウンドスレッドで新しいファイルを生成できるようにするため)。
これは私の問題に対する特定の解決策です。より一般的な解決策については、受け入れられた回答をお読みください。
また、Pythonを使用してファイルへのアクセスとディレクトリウォーキングを最適化するために私が見つけた他の2つのソリューションに興味があるかもしれません。