Permission Error: Using Image.open
Permission Error: Using Image.open
我正在为 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 个文件名并将其保存在不同的列表中,运行 上面的语句和 运行 循环中的代码。它也起作用了。我认为“此处的错误信息具有误导性。”
可能只是 train_filenames
中的文件名之一无效(尽管 train_filenames[0]
显然是有效的)。仅出于调试目的(您可以在它工作后稍后将其放回原处),将您用于打开图像的列表理解解压缩到 for
循环中并添加 print
语句:
images = []
for fname in train_filenames:
print(loc+"/"+fname)
images.append(np.array(Image.open(loc+"/"+fname)))
train = np.array(images)
在出现异常之前打印出的最后一个文件名将是有问题的文件名。显然,如果您尝试 open a directory as a file...
,可能导致 Windows PermissionError
的原因之一
或者,如果循环在第一个文件后中断,那么您知道您有 weirder/harder 可以解决问题。
我正在为 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 个文件名并将其保存在不同的列表中,运行 上面的语句和 运行 循环中的代码。它也起作用了。我认为“此处的错误信息具有误导性。”
可能只是 train_filenames
中的文件名之一无效(尽管 train_filenames[0]
显然是有效的)。仅出于调试目的(您可以在它工作后稍后将其放回原处),将您用于打开图像的列表理解解压缩到 for
循环中并添加 print
语句:
images = []
for fname in train_filenames:
print(loc+"/"+fname)
images.append(np.array(Image.open(loc+"/"+fname)))
train = np.array(images)
在出现异常之前打印出的最后一个文件名将是有问题的文件名。显然,如果您尝试 open a directory as a file...
,可能导致 WindowsPermissionError
的原因之一
或者,如果循环在第一个文件后中断,那么您知道您有 weirder/harder 可以解决问题。