os.walk给出不存在的目录

时间:2019-03-15 12:32:17

标签: python

我有一个文件夹,其中有对应于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为我们提供了目录路径。

3 个答案:

答案 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)将不起作用。