Python-从文件名列表读取文件时出错

时间:2018-09-27 08:41:07

标签: python

我正在尝试将文件夹中的第一张图像与同一文件夹中的所有其他图像进行比较,以检查是否有相同的图像。简单的想法-将有问题的文件夹的文件名加载到列表f,进行嵌套的for循环以将f [0]与f [1],f [2] ...进行比较,依此类推。这适用于f [0],f [1],f [2],但给出 IOError没有这样的文件或目录:'1_slice_0003.tif'。 该文件位于文件夹中,并且已正确写入f(我可以正确打印f [3])。 f的长度也与映像目录中的文件数匹配。我在这里想念什么?

from PIL import Image
import math, operator
import os

f = os.listdir("E:/JAWS/Converted_tiff/1")
count = 0

for filename in f:


    h1 = Image.open(filename).histogram()

    for filename in f:

       filename = f[count]
       h2 = Image.open(filename).histogram()

       rms = math.sqrt(reduce(operator.add,
                    map(lambda a,b: (a-b)**2, h1, h2))/len(h1))

       print str(f[count])
       print rms
       count += 1

2 个答案:

答案 0 :(得分:4)

您还需要提供文件夹的路径。

for filename in f:
    h1 = Image.open(os.path.join(f, filename)).histogram()

答案 1 :(得分:1)

您将计数增加到错误的级别,并且没有使用真实路径打开文件。

from PIL import Image
import math, operator
import os

f = os.listdir("E:/JAWS/Converted_tiff/1")
count = 0

for filename in f:


    h1 = Image.open(os.path.join(f, filename)).histogram()

    for filename in f:

       filename = f[count]
       h2 = Image.open(os.path.join(f, filename)).histogram()

       rms = math.sqrt(reduce(operator.add,
                    map(lambda a,b: (a-b)**2, h1, h2))/len(h1))

       print str(f[count])
       print rms

    count += 1

顺便说一句,相反,每次您都可以缓存直方图时打开文件,以避免一次又一次打开同一文件。