#python
#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(корни) Ошибка FileNotFoundError: [Ошибка 2] Нет такого файла или каталога: ‘U’
Когда я print(root)
это дает правильные пути к вложенным папкам. Как мне обработать эту ошибку?
РЕДАКТИРОВАТЬ: Заставил его работать, удалив for roots in root
из ОС.walk возвращает 3 кортежа для каждого каталога, где root указывает нам пути к каталогам.
Ответ №1:
Как говорится в документах 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)
не будет работать.
Комментарии:
1. Ах. Значит, я должен использовать каталоги вместо этого?
2. я предлагаю вам распечатать
root, dirs, files
, чтобы посмотреть, что это такое, а затем приступить к тому, что вам нужно. я не уверен, что вызовos.chdir
во время повторенияos.walk
будет работать так, как ожидалось…