簡體   English   中英

如何從多個子文件夾中隨機選擇 select 文件

[英]How to select file randomly from multiple sub-folders

我有多個子文件夾,每個子文件夾都有多個文件。 我需要隨機 select 子文件夾,然后需要 select 該子文件夾中的隨機文件。 假設我有五個文件夾 A、B、C、D、E,每個文件夾包含另一個名為 data 的文件夾,這個 data 文件夾包含多個文件。 我需要從五個文件夾中隨機選擇文件夾然后打開data文件夾最后隨機select一個文件。

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

現在要從路徑中獲取隨機文件,請執行 random.choice() 並傳遞該路徑中的文件列表。 使用 os.listdir(path) 獲取文件列表。


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))

試試這個:(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 個函數來構建代碼塊:

  • 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM