【问题标题】:os.walk giving non existent directoriesos.walk 给出不存在的目录
【发布时间】:2019-03-15 12:32:16
【问题描述】:

我有一个文件夹,里面有对应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(根) FileNotFoundError:[Errno 2] 没有这样的文件或目录:'U'

当我print(root) 时,它会给出正确的子文件夹路径。我该如何处理这个错误?

编辑: 通过删除 for roots in root 使其工作,因为 os.walk 为每个目录返回一个 3 元组,其中 root 为我们提供了目录路径。

【问题讨论】:

    标签: python


    【解决方案1】:

    正如docs on os.walk() 所说,它返回的每个 3 元组中的第一项是一个字符串。 因此,for roots in root: 迭代字符串的字符。 你需要仔细阅读os.walk()返回什么样的数据结构,并相应地重构你的脚本。

    【讨论】:

      【解决方案2】:

      其他人已经指出了什么是错误的,所以我不再重复。 我只是补充一点,你应该使用

      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)
      

      【讨论】:

        【解决方案3】:

        root 将是一个字符串; os.walk当前目录的名称。

        for roots in root:
        

        将遍历该字符串; roots 将一次迭代 root 一个字符... os.chdir(some character) 将不起作用。

        【讨论】:

        • 啊。所以我应该改用 dirs 吗?
        • 我建议你打印出root, dirs, files,看看它们是什么,然后继续你需要的。我不确定在迭代 os.walk 时调用 os.chdir 是否会按预期工作......
        猜你喜欢
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2016-08-10
        • 2020-08-27
        • 1970-01-01
        • 2015-07-11
        相关资源
        最近更新 更多