![](/img/trans.png)
[英]Python: how to create a list with names based on the content of a given folder?
[英]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.