かなり遅いディスク上に数百万のアイテムがあるディレクトリがあります。これらのアイテムのうち100個を無作為にサンプリングしたいので、glob
も使用しています。それを行うにはPythonでディレクトリを無作為にサンプリングする最も効率的な方法
一つの方法は、そのサンプル、ディレクトリ内のすべてのファイルのグロブを得ることです:
files = sorted(glob.glob('*.xml'))
file_count = len(files)
random_files = random.sample(
range(0, file_count),
100
)
しかし、私は数百万のファイルの大きなリストを構築する必要があるため、これは本当に遅いですこれは、多くのディスクをクロールする必要があります。
これを実行するより速い方法がありますが、それほど多くのディスクにヒットしませんか?高速であれば、完全に配布されたサンプルでなくても、正確に100個のアイテムを作成する必要はありません。
私はそれを考えています:
- 多分私達は速いとiノードを使用することができますか?
- ディスク上にあるものの全体を知らなくてもアイテムを選択できるのでしょうか?
- おそらく、これを高速化できるいくつかのショートカットがあります。
は、その多くの場合、ディレクトリの変更をしていますか?そうでない場合は、ファイルリストを別のファイルに保存し、ランダムサンプリングに使用します。 –
@BrentWashburneそれはトンを変更することはありませんが、技術的な解決策が可能であれば、むしろ混乱を避けるでしょう。 – mlissner
ファイル名はパターンに従っていますか?最初の文字が[a-z]の文字の場合、ランダムな文字を選択してグロブを開始し、ランダムに1つを選択することができます。 100ファイルに対して繰り返します。 –