![](/img/trans.png)
[英]How to automatically merge multiple CSVs from multiple sub-folders, without specifying sub-folder name?
[英]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.