"IsADirectoryError: [Errno 21] Это каталог:" Это файл

Я уже разделил данные на тестовый и обучающий набор в другую папку. Теперь мне нужно загрузить данные пациента. У каждого пациента по 8 изображений.

def load_dataset(root_dir, split):
"""
load the data set numpy arrays saved by the preprocessing script
:param root_dir: path to input data
:param split: defines whether to load the training or test set
:return: data: dictionary containing one dictionary ({'data', 'seg', 'pid'}) per patient
"""
in_dir = os.path.join(root_dir, split)
data_paths = [os.path.join(in_dir, f) for f in os.listdir(in_dir)]
data_and_seg_arr = [np.load(ii, mmap_mode='r') for ii in data_paths]
pids = [ii.split('/')[-1].split('.')[0] for ii in data_paths]
data = OrderedDict()
for ix, pid in enumerate(pids):
    data[pid] = {'data': data_and_seg_arr[ix][..., 0], 'seg': data_and_seg_arr[ix][..., 1], 'pid': pid}
return data

Но в ошибке говорилось:

File "/home/zhe/Research/Seg/heart_seg/data_loader.py", line 61, in load_dataset
data_and_seg_arr = [np.load(ii, mmap_mode='r') for ii in data_paths]
File "/home/zhe/Research/Seg/heart_seg/data_loader.py", line 61, in <listcomp>
data_and_seg_arr = [np.load(ii, mmap_mode='r') for ii in data_paths]
File "/home/zhe/anaconda3/envs/tf_env/lib/python3.6/site-packages/numpy/lib/npyio.py", line 372, in load
fid = open(file, "rb")
IsADirectoryError: [Errno 21] Is a directory: './data/preprocessed_data/train/Patient009969'

Это уже имя файла, а не каталог. Спасибо!

* Data_paths - это каталог. я хочу загрузить изображения (data_and_seg_arr) в папку пациента (data_paths). Но в ошибке говорилось, что data_paths должен быть файлом, а не каталогом.

Zhuo 14.09.2018 22:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
20
1
120 014
3

Ответы 3

У вас есть как файлы, так и каталоги внутри вашего пути? os.listdir перечислит и файлы, и каталоги, поэтому, когда вы попытаетесь открыть каталог с np.load, он выдаст эту ошибку. Вы можете фильтровать только файлы, чтобы избежать ошибки:

data_paths = [os.path.join(in_dir, f) for f in os.listdir(in_dir)]
data_paths = [i for i in data_paths if os.path.isfile(i)]

Или все вместе в одной строке:

data_paths = [i for i in (os.path.join(in_dir, f) for f in os.listdir(in_dir)) if os.path.isfile(i)]

Большое спасибо. Я был неправ. data_paths - это каталог. я хочу загрузить изображения (data_and_seg_arr) в папку пациента (data_paths). Но в ошибке говорилось, что data_paths должен быть файлом

Zhuo 14.09.2018 23:01

Кажется, что ./data/preprocessed_data/train/Patient009969 - это каталог, а не файл.

os.listdir() возвращает и файлы, и каталоги.

Может быть, попробуйте вместо этого использовать os.walk(). Он обрабатывает файлы и каталоги отдельно и может рекурсивно перемещаться внутри подкаталогов для поиска дополнительных файлов итеративным способом:

data_paths = [os.path.join(pth, f) 
    for pth, dirs, files in os.walk(in_dir) for f in files]

Большое спасибо. Я был неправ. data_paths - это каталог. я хочу загрузить изображение0 ~ 7 (data_and_seg_arr) в папку пациента (data_paths). Но в ошибке говорилось, что data_paths должен быть файлом.

Zhuo 14.09.2018 22:55

@Zhuo, если вы используете код, указанный в моем ответе, он должен работать

nosklo 17.09.2018 01:02

У меня была такая же проблема, но я решил, изменив свой путь с Data/Train_Data/myDataset/(my images) на Data/Train_Data/(my images), где скрипт python находится на том же пути, что и Data. Надеюсь на эту помощь.

Другие вопросы по теме