【问题标题】:How to select file randomly from multiple sub-folders如何从多个子文件夹中随机选择文件
【发布时间】:2020-07-03 22:15:20
【问题描述】:

我有多个子文件夹,每个子文件夹都有多个文件。我需要随机选择子文件夹,然后需要在该子文件夹中选择一个随机文件。假设我有五个文件夹 A、B、C、D、E,每个文件夹都包含另一个名为 data 的文件夹,这个 data 文件夹包含多个文件。我需要从五个文件夹中随机选择一个文件夹,然后打开data文件夹,最后随机选择一个文件。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 使用random.choice 从列表中随机选择一项。

标签: python python-3.6


【解决方案1】:

将文件夹名称保存在列表中。 import random import os folders = [0,1,2,3,4] selected_folder = random.choice(folders) path = selected_folder+"/data"

现在要从路径中获取随机文件,执行 random.choice() 并传递该路径中的文件列表。 使用 os.listdir(path) 获取文件列表。

【讨论】:

    【解决方案2】:
    
    import os
    import random
    
    path = os.getcwd()
    
    def getRandomFile(path):
        randomDir = random.choice([(x) for x in list(os.scandir(path)) if x.is_dir()]).name
        randomFile = random.choice([f for f in list(os.scandir(randomDir + "\\data\\"))]).name
        return randomFile
    
    print(getRandomFile(path))
    

    【讨论】:

      【解决方案3】:

      试试这个:(Python 文件必须与这 5 个文件夹位于同一主文件夹中)

      import os,random
      lst=list(filter(lambda x: os.path.isdir(x), os.listdir('.'))) //get folder list
      folder=random.choice(lst) //select random folder
      os.chdir(os.path.join(os.path.dirname(__file__), folder, 'data')) // goto random folder/data
      lst=list(filter(lambda x: os.path.isfile(x), os.listdir('.'))) //get file list
      file=random.choice(lst) //get random file
      print(file)
      

      【讨论】:

        【解决方案4】:

        据我了解,您实际上需要 4 个函数来构建代码块:

        • os.listdir(path) 列出某个位置的所有文件和目录
        • os.path.isdir(path) 检查某个位置的元素是否为目录
        • os.path.isfile(path) 与文件同上
        • random.randrange(X) 查找[0]范围内的随机数; X[

        我相信您可以轻松找到有关这些函数的文档,因为它们都在 python 的标准库中。无论如何,这是您的代码:

        import os
        import random
        
        path = "/home/johndoe/"
        dirs  = list(filter(lambda dir: os.path.isdir(os.path.join(path, dir)), os.listdir(path)))
        
        dir_chosen = dirs[random.randrange(len(dirs))]
        
        files_path = os.path.join(path, dir_chosen, "data")
        files = list(filter(lambda file: os.path.isfile(os.path.join(files_path, file)), os.listdir(files_path)))
        
        file_chosen = files[random.randrange(len(files))]
        
        print("the file randomly chosen is: {}".format(os.path.join(files_path, file_chose )))
        

        如果您不了解os.path.join(a, b),也可以查看它,但它基本上相当于UNIX 上的a + '/' + b 和Windows 上的a + '\' + b

        【讨论】:

        • 作为其他回答问题的人,random.choice 是比random.randrange 更好的选择。
        猜你喜欢
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        相关资源
        最近更新 更多