我有一个文件夹,其中有对应于10个不同类的子文件夹,这些子文件夹的名称是我的标签。我想出了以下代码,将图像读取到一个Numpy数组中并保存标签。
import numpy as np
import pandas as pd
import cv2
import glob
import os
x=np.empty([28,28])
y=np.empty([1,0])
for root, dirs, files in os.walk("filepath"):
for roots in root:
os.chdir(roots)
images = np.array([cv2.imread(file) for file in glob.glob(roots+"/*.jpg")])
num_of_images=images.shape[0]
if num_of_images == 0:
continue
else:
x = np.concatenate((x,images),axis=0)
labels = np.empty([num_of_images,1])
labels = labels.astype(str)
#labels = get from last part of file name in roots
#y=np.concatenate((y,labels),axis=0)
我得到的错误是
os.chdir(roots) FileNotFoundError:[错误2]没有这样的文件或目录:'U'
当我print(root)
给出正确的子文件夹路径时。如何处理此错误?
编辑:
通过删除for roots in root
使其正常工作,因为os.walk为每个目录返回3个元组,其中root为我们提供了目录路径。
答案 0 :(得分:1)
正如docs on os.walk()所说,它返回的每个三元组中的第一项是一个字符串。
这样,for roots in root:
遍历字符串的字符。
您需要仔细阅读os.walk()
返回的数据类型,并相应地重组脚本。
答案 1 :(得分:1)
其他人已经指出了问题所在,因此我不再重复。 我要补充一点,你应该使用
help(os.walk)
或在问问题之前在解释器内部的任何功能无法正常工作。
您可以按以下方式处理此错误:
import os
for root, dirs, files in os.walk(path):
for thedir in dirs:
p = os.path.join(root, thedir)
os.chdir(p)
答案 2 :(得分:0)
root
将是一个字符串; os.walk
当前目录的名称。
for roots in root:
将遍历该字符串; roots
一次将在root
个字符上进行迭代... os.chdir(some character)
将不起作用。