Python 'exifread' 模块在转到 thourg 而不是图片时返回错误,例如.mp3



我正在构建一个Python程序,使用exifread模块按"EXIF DateTimeOriginal"标签对图片进行排序。当exifread.process_file(item)处理不图片文件(例如.mp3文件)时出错。我希望 Python 忽略没有 EXIF 标签的文件,所以我使用try, except语句,但它仍然返回终止程序的错误File format not recognized

我添加了停止程序终止的tags["EXIF DateTimeOriginal"] == True,但仍然打印错误。

有没有人知道如何使exifread模块忽略不是图片的文件?

import exifread
item = "D:TEMPVesna.mp3"

with open(item, 'rb') as file:
try:
tags = exifread.process_file(file, stop_tag="EXIF DateTimeOriginal")
tags["EXIF DateTimeOriginal"] == True
except:
print("No tag")
else:
taken = tags["EXIF DateTimeOriginal"]
print(tags["EXIF DateTimeOriginal"])

**returns**
File format not recognized.
No tag

我可以在将它们提取到exifread命令之前整理出不是图片文件,但我的印象是这需要更多时间,而且有些图像仍然不具备所需的标签。

从源中,process_file捕获文件类型错误,记录警告消息并返回空dict。 您可以测试空dict,或者,由于您还担心该dict中的条目,请使用具有默认值的get进行测试。您可以使用logging模块更改日志记录事件发生的情况。

import exifread
import logging
item = "D:TEMPVesna.mp3"
logging.basicConfig(level=logging.ERROR)
with open(item, 'rb') as file:
tags = exifread.process_file(file, stop_tag="EXIF DateTimeOriginal")
if tags.get("EXIF DateTimeOriginal", True):
taken = tags["EXIF DateTimeOriginal"]
print(tags["EXIF DateTimeOriginal"])
else:
print("No tag")

您的解决方案仍然@tdelaney引发错误,所以我稍微调整了一下,这就是结果。感谢您对logging模块的介绍:)

import exifread
import logging
item = "D:TEMP\20160130_215245.jpg"
logging.basicConfig(level=logging.ERROR)
try:
file = open(item, 'rb')
tags = exifread.process_file(file, stop_tag="EXIF DateTimeOriginal")
taken = tags["EXIF DateTimeOriginal"]
except:
print("No tag")
else:
print(tags["EXIF DateTimeOriginal"])

最新更新