私は、個々のファイルがまったく同じ確率で選択されるような方法でディレクトリツリーからファイルをランダムに選択する方法を探しています他のすべてのファイルと同じです。ディレクトリツリーからランダムに完全に公正な方法でファイルを選択
- /いくつか/親/ディレクトリ/
- foo.jpgという
- sub_dir/
- :ファイルの以下のツリーの例では、各ファイルが選択されているのは25%の確率を持っている必要がありますBar.jpg
- Baz.jpg
- another_sub/
- qux.png しかし、これは明らかにバイアスし
def random_file(dir): file = os.path.join(dir, random.choice(os.listdir(dir))); if os.path.isdir(file): return random_file(file) else: return file
:私はアプリの残りの部分をコーディングしながら、私が使用している
私の暫定的な解決策はそうのような機能を持つことです結果は、ツリー内のどこにあるか、また、ディレクトリ内にある兄弟がどれだけ横に並んでいるかによって異なります。その結果、選択される確率は次のようになります。
- /何らかの/親/ DIR/
- foo.jpgという - 50%
- sub_dir /(50%)
- Bar.jpg - 16.6%
- Baz.jpg - 16.6%
- another_sub /(16.6%)
- qux.png - 16.6%
機能のコンテキストは、私が書いている背景回転アプリであるので、私は単純に強制可能性が結果にいるから不要なファイルの拡張子をフィルタリングする機能は、(ボーナスだろうそれは、私が望むファイルタイプではないかどうかをもう一度選択することによって、「間違った」タイプのファイルが豊富にある場合は面倒です。
あなたはすべての画像が一度1「実行」になりたいですか?すべてのファイルを繰り返し処理してリストに追加し、そのリストを一度シャッフルすることができます。 – Jacob
@Graham、+1良い質問 – nsd