python - "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/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]
推荐阅读
- java - 客户端将数字发送到服务器,但服务器不会将它们发回
- python - Checkbuttons 都设置为相同的 tkinter
- r - 使用“表格”函数查找每个季度的阳性病例与总病例的比率
- c++ - 重载可变参数模板化方法
- dicom - DCMTK 读取 pixelBuffer 或图像属性(行、列)返回 0
- bash - 如何在bash中用sed命令替换符号之间
- python - BucketIterator 返回标签而不是文本
- javascript - 谷歌分析 api,获取列表帐户 - gapi.client.analytics.management 未定义
- javascript - Discord.js 机器人:获取消息
- javascript - Javascript 闭包和 Fetch API