![](/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.