我正在构建一个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"])