gpt4 book ai didi

python - 以完全公平的方式从目录树中随机选择一个文件

转载 作者:太空狗 更新时间:2023-10-29 21:19:01 25 4
gpt4 key购买 nike

我正在寻找一种从目录树中随机选择文件的方法,这样任何单个文件被选中的概率都与所有其他文件完全相同。例如在下面的文件树中,每个文件应该有 25% 的机会被选中:

  • /一些/ parent /目录/
    • Foo.jpg
    • 子目录/
      • 酒吧.jpg
      • 巴兹.jpg
      • 另一个子/
        • 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

然而,这显然会使结果产生偏差,具体取决于它们在树中的位置以及它们的目录中有多少 sibling ,因此它们最终被选中的概率如下:

  • /一些/ parent /目录/
    • Foo.jpg - 50%
    • 子目录/(50%)
      • Bar.jpg - 16.6%
      • Baz.jpg - 16.6%
      • 另一个子/(16.6%)
        • qux.png - 16.6%

该函数的上下文在我正在编写的后台旋转应用程序中,因此能够从结果中过滤掉不需要的文件扩展名将是一个好处(尽管如果不是,我可以通过再次选择来强制执行此操作我想要的文件类型……如果有大量“错误”类型的文件,那会变得很乱)。

最佳答案

如果你事先知道文件总数,你只能以相同的概率选择所有文件,所以你需要先创建一个完整列表:

files = [os.path.join(path, filename)
for path, dirs, files in os.walk(dir)
for filename in files
if not filename.endswith(".bak")]
return random.choice(files)

关于python - 以完全公平的方式从目录树中随机选择一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6411811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com