簡體   English   中英

如何從基於 python 文件夾名稱列表的目錄中獲取 select 文件夾?

[英]How to select folders from a directory based on a python list of the folder names?

我有一個文件夾名稱列表 - “df_train_pos_list”

我想遍歷一個目錄和 select 個具有這些名稱的文件夾,並將它們添加到另一個列表 - “train_images”

到目前為止,我嘗試過的方法不起作用:

train_images = []
train_labels = []

for i in df_train_pos_list:
    for currentpath, folders, files in os.walk('D:\Arm C Deep Learning\SH_OCTAPUS\Train'):
        for file in files:
            if i in currentpath:
                train_images.append('D:\Arm C Deep Learning\SH_OCTAPUS\Train' + file)
                train_labels.append(1)
            else:
                train_images.append('D:\Arm C Deep Learning\SH_OCTAPUS\Train' + file)
                train_labels.append(0)
train_labels = np.asarray(train_labels, dtype=np.int64)
print(train_labels)
np.unique(train_labels, return_counts='TRUE')

有點不確定你是想將文件夾路徑添加到列表還是文件夾中的單個文件到你的列表,但下面的代碼片段會將文件夾路徑添加到你的trains_list 需要更多關於您想要從 label 中獲得什么的詳細信息才能添加。

import os
df_train_pos_list =[]
train_images = []
#train_labels = []
root = 'D:\Arm C Deep Learning\SH_OCTAPUS\Train'
for f in os.listdir(root):
    if f in df_train_pos_list:
        train_label = 1
    else:
        train_label = 0
    train_images.append((os.path.join(root,f),train_label)) #this will add your folder file path to train images

for folder, label in train_images:
    if label==1:
        #do something here

據我了解,您正在嘗試生成 2 個列表:一個包含 "D:\Arm C Deep Learning\SH_OCTAPUS\Train" 中的所有路徑,另一個包含 0 和 1,具體取決於路徑是否在df_train_pos_list中。

這應該可以解決問題:

from pathlib import Path

df_train_pos_list = []
train_images = []
train_labels = []
df_train_pos_set = set(df_train_pos_list)

for path in Path("D:\Arm C Deep Learning\SH_OCTAPUS\Train").glob("*"):
    train_images.append(path)
    train_labels.append(1 if path.name in df_train_pos_set else 0)

有幾點需要注意:

  • pathlib是處理文件系統的最佳實踐。
  • 我正在從您的df_train_pos_list創建一個set以提高復雜性。 list創建set需要 O(N) 時間復雜度,但檢查路徑是否在set中需要 O(1),而使用list需要 O(N)。

暫無
暫無

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

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