"IsADirectoryError: [Errno 21] является каталогом:" это файл - PullRequest
0 голосов
/ 14 сентября 2018

Я уже разбил данные на тестовые и обучающие наборы в другой папке.Теперь мне нужно загрузить данные пациента.У каждого пациента есть 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'

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

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Кажется, что ./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]
0 голосов
/ 25 апреля 2019

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

0 голосов
/ 14 сентября 2018

У вас есть файлы и каталоги внутри вашего пути? 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...