【发布时间】:2018-04-20 08:36:43
【问题描述】:
我正在为 Image.open 使用 PIL
以下是我的图片路径:
loc = "./data/Flicker8k_reshaped"
当我尝试在此路径中打开图像文件时,使用以下用法会打开图像。
Image.open(loc + "/" + train_filenames[0]) # Opens an image
np.array(Image.open(loc + "/" + train_filenames[0])) # converts that into numpy array
train_filenames 是包含我需要使用 numpy 数组矢量化的图像文件名的列表。
但是当我尝试在循环和列表理解中运行它时,
train = np.array([np.array(Image.open(loc+"/"+fname)) for fname in train_filenames])
我收到以下错误。
---------------------------------------------------------------------------
PermissionError Traceback (most recent call last)
<ipython-input-35-90eaea1b75ca> in <module>()
----> 1 train = np.array([np.array(Image.open(loc+"/"+fname)) for fname in train_filenames])
2 test = np.array([np.array(Image.open(loc+"/"+fname)) for fname in test_filenames])
3 val = np.array([np.array(Image.open(loc+"/"+fname)) for fname in val_filenames])
4
5 print(train.shape)
<ipython-input-35-90eaea1b75ca> in <listcomp>(.0)
----> 1 train = np.array([np.array(Image.open(loc+"/"+fname)) for fname in train_filenames])
2 test = np.array([np.array(Image.open(loc+"/"+fname)) for fname in test_filenames])
3 val = np.array([np.array(Image.open(loc+"/"+fname)) for fname in val_filenames])
4
5 print(train.shape)
C:\Anaconda\envs\tensorflow-cpu\lib\site-packages\PIL\Image.py in open(fp, mode)
2541
2542 if filename:
-> 2543 fp = builtins.open(filename, "rb")
2544 exclusive_fp = True
2545
看起来像
builtins.open(filename, "rb")
我选择了 5 个文件名并将其保存在不同的列表中,然后运行上述语句并在循环中运行代码。它也奏效了。我认为这里的“错误信息具有误导性。”
【问题讨论】:
-
您是否有权打开该目录中的文件?
-
是的,我愿意。这就是我可以在循环外打开它的方式
-
当 open 语句在循环内时会出现权限错误而在循环外不会出现权限错误,这是没有意义的。在循环之外,您打开一个文件。在循环中,您打开几个文件。如果您甚至没有打开其中一个的权限,您将收到错误消息。您检查了所有文件吗?
-
这显然是导致您的问题的一个特定文件/文件名。你只需要弄清楚哪个是烂苹果
-
天啊。那是一个空行:-(