我必须搜索以“Image.jpg.yaml”或“Image.jpeg.yaml”形式出现的快照“Image.webp”的基本事实。它可以在模式中包含.jpg或.jpeg。如何检查哪一个存在并相应地生成我的snapshot_groundtruth。
snapshot_groundtruth = os.path.join(cfg.markup, dataset, image + '.jpg'+ '.yaml')
进一步澄清:实际上,.webp格式的图像和基本事实都是二进制可执行文件使用的参数。图像从jpeg / jpg格式转换为webp格式。然而,基本事实仍然是'jpeg / jpg + yaml'扩展,所以我需要在'.webp'文件中搜索正确的地面实况文件。
答案 0 :(得分:2)
检查一个文件是否存在以及如果不存在则使用另一个文件的最佳方法是尝试:
try:
snapshot_groundtruth = os.path.join(cfg.markup, dataset, image + '.jpg'+ '.yaml')
snapshot = open(snapshot_groundtruth)
except FileNotFoundError:
snapshot_groundtruth = os.path.join(cfg.markup, dataset, image + '.jpeg'+ '.yaml')
snapshot = open(snapshot_groundtruth)
(当然,如果既不存在,那也会引发第二个FileNotFoundError
,但这可能就是你想要的,对吗?)
在Python中,这个成语被称为EAFP或EAFTP,用于“更容易请求宽恕而不是权限”。不要预先检查某些东西是否有用,只需尝试一下,看它是否有效。
除了是Pythonic之外,这也避免了可能导致百万分之一调试恶梦和/或安全漏洞的竞争条件。 (如果文件在检查时存在,但在打开文件时不存在会怎么样?反之亦然?)