0

我必须搜索以“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”文件。

4

1 回答 1

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 之外,这还避免了可能导致百万分之一的调试噩梦和/或安全漏洞的竞争条件。(如果文件在您检查时存在,但在打开时不存在怎么办?反之亦然?)

于 2013-05-08T00:58:24.897 回答