Python 基于文件名结尾的照片排序

Python 基于文件名结尾的照片排序,python,Python,我正在尝试对两个文件夹中的照片进行排序,并从一个文件夹中获取以1550_N结尾的照片,从另一个文件夹获取以1050_N结尾的照片。我为同样的问题编写了下面的函数。问题在于1550文件夹中并非所有N都在1到150之间,而是1050文件夹中所有N都在1到150之间 dir\u name\u 1200=“C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung\u Reaktion/20201023\u 1ter\u Reaktionstag/outp

我正在尝试对两个文件夹中的照片进行排序,并从一个文件夹中获取以1550_N结尾的照片,从另一个文件夹获取以1050_N结尾的照片。我为同样的问题编写了下面的函数。问题在于1550文件夹中并非所有N都在1到150之间,而是1050文件夹中所有N都在1到150之间

dir\u name\u 1200=“C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung\u Reaktion/20201023\u 1ter\u Reaktionstag/output\u 1200”
dir_name_1550=“C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung\u Reaktion/20201023\u 1ter\u Reaktionstag/output\u 1550”
dir_name_1050=“C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung\u Reaktion/20201023\u 1ter\u Reaktionstag/output\u 1050\u old”
用于计算的def匹配照片(n,目录名称1,目录名称2):
#x=str(n)
对于os.listdir(dir\u name2)中的文件名\u 1:
x=路径(文件名为\-1).stem.split(“”\')[-1]
#打印(x)
如果x==str(n):
打印('是')
filename\u dir1=filename\u 1
对于os.listdir(dir\u name1)中的文件名:
y=路径(文件名).stem.split(“”“)[-1]
#打印(y)
如果y==str(n):
z='1050_R_'+y+'
对于os.listdir(dir_name_1050)中的文件名_2:
如果re.match(r.*%s.'%z,文件名_2)不是无:
filename_dir2=filename_2
返回文件名\u dir1,文件名\u dir2
对于范围(1150)内的i:
(filename_1550,filename_1050)=匹配_计算的照片(i,dir_name_1550,dir_name_1050)
打印(文件名_1550)
打印(文件名_1050)
但是我在上面的迭代中得到的错误如下

 File "C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Quellcode/sort.py", line 39, in <module>
    (filename_1550, filename_1050) = match_photos_for_calc(i, dir_name_1550, dir_name_1050)
  File "C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Quellcode/sort.py", line 34, in match_photos_for_calc
    return filename_dir1, filename_dir2
UnboundLocalError: local variable 'filename_dir1' referenced before assignment
但是当1550文件夹中某个特定
i
的照片不存在时,我会得到以下错误

    File "C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Quellcode/sort.py", line 39, in <module>
    (filename_1550, filename_1050) = match_photos_for_calc(i, dir_name_1550, dir_name_1050)
    File "C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung_Reaktion/Quellcode/sort.py", line 34, in match_photos_for_calc
    return filename_dir1, filename_dir2
UnboundLocalError: local variable 'filename_dir1' referenced before assignment
文件“C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung\u Reaktion/Quellcode/sort.py”,第39行,在
(filename_1550,filename_1050)=匹配_计算的照片(i,dir_name_1550,dir_name_1050)
文件“C:/Users/shiva/OneDrive/Desktop/WORK/Bildverarbeitung\u Reaktion/Quellcode/sort.py”,第34行,匹配用于计算的照片
返回文件名\u dir1,文件名\u dir2
UnboundLocalError:赋值前引用的局部变量“filename\u dir1”

如何解决这个问题?

最简单的方法是在函数调用语句周围添加一个
try

试试看:
(filename_1550,filename_1050)=匹配_计算的照片(i,dir_name_1550,dir_name_1050)
除UnboundLocalError外:
持续

注意:这不是最优雅的解决方案,只是一个简单的修复

下面是我的进一步代码

    for i in range(1, 150):
try:
    (filename_1550_i, filename_1050_i) = match_photos_for_calc(i, dir_name_1550, dir_name_1050)
except UnboundLocalError:
    continue

print(filename_1550_i)
print(filename_1050_i)
# for filename_1550 in os.listdir(dir_name_1550):
img_1550 = cv2.imread(os.path.join(dir_name_1550, filename_1550_i))
img_meth_1550 = cv2.imread(os.path.join(dir_ref, '23_10_2020_15_02_47_1550_5.png'))
img_1050 = cv2.imread(os.path.join(dir_name_1050, filename_1050_i))
img_meth_1050 = cv2.imread(os.path.join(dir_ref, '23_10_2020_15_02_29_1050_2.png'))


intensity_image_1550 = np.log10(np.divide(img_meth_1550, img_1550))  # calculate_intensity(img_meth_1550, img_1550)
plt.imshow(img_meth_1550)
plt.show()
intensity_image_1050 = np.log10(np.divide(img_meth_1050, img_1050))  # calculate_intensity(img_meth_1050, img_105050)
result = intensity_image_1050 - intensity_image_1550
print(result)
intensity_image = np.nan_to_num(result)
我得到下面的错误= 文件“C:/Users/shiva/PycharmProjects/pythonProject/isabella.py”,第230行,在 强度图像=np.log10(np.divide(img方法1550,img方法1550))计算强度(img方法1550,img方法1550)
类型错误:不支持/:'int'和'NoneType'的操作数类型

如果您有一个pathlib
posix
对象来检查项目是否存在,则可以使用
is_file()
is_dir()
方法,然后再继续使用代码。您好,你能给我一个例子,我可以把它放在代码中,当一个文件不存在于两个文件夹中时,你想如何处理这种情况?传下去还是出错?我打算传下去。我该怎么做呢?我的意图是for循环应该跳过其中一个文件夹中不存在照片的数字,然后转到下一个我你能解决这个问题吗?嗨,是的,我能解决。我正在使用这个函数的输出。当结果是文件不存在时,如何使其工作。我得到以下错误强度\u image\u 1550=np.log10(np.divide(img\u meth\u 1550,img\u 1550))\u计算强度(img\u meth\u 1550,img\u 1550)类型错误:不支持/:“int”和“NoneType”的操作数类型尝试这种新方法,如果文件不存在,则可以在函数调用后跳过所有代码。我仍然得到错误强度\u image\u 1550=np.log10(np.divide(img\u meth\u 1550,img\u 1550))\n计算强度(img\u meth\u 1550,img\u 1550)类型错误:不支持的操作数类型对于/:'int'和'NoneType'似乎cv2无法在路径中找到文件,如果文件名有效,那么我将尝试打印连接的路径并检查路径是否正确
    for i in range(1, 150):
try:
    (filename_1550_i, filename_1050_i) = match_photos_for_calc(i, dir_name_1550, dir_name_1050)
except UnboundLocalError:
    continue

print(filename_1550_i)
print(filename_1050_i)
# for filename_1550 in os.listdir(dir_name_1550):
img_1550 = cv2.imread(os.path.join(dir_name_1550, filename_1550_i))
img_meth_1550 = cv2.imread(os.path.join(dir_ref, '23_10_2020_15_02_47_1550_5.png'))
img_1050 = cv2.imread(os.path.join(dir_name_1050, filename_1050_i))
img_meth_1050 = cv2.imread(os.path.join(dir_ref, '23_10_2020_15_02_29_1050_2.png'))


intensity_image_1550 = np.log10(np.divide(img_meth_1550, img_1550))  # calculate_intensity(img_meth_1550, img_1550)
plt.imshow(img_meth_1550)
plt.show()
intensity_image_1050 = np.log10(np.divide(img_meth_1050, img_1050))  # calculate_intensity(img_meth_1050, img_105050)
result = intensity_image_1050 - intensity_image_1550
print(result)
intensity_image = np.nan_to_num(result)