我试图只在数组列表中保存DateTime和DateTimeOriginal。
当我运行此脚本时,在打印我的arraylist时会得到以下输出:
[(0x0132) ASCII=2010:07:13 00:00:42 @ 174, (0x9003) ASCII=2010:07:13 00:00:42 @ 530]
我只想获得以下输出,就像我使用print
函数:
DateTime : 2010:07:13 00:00:42
DateTimeOriginal : 2010:07:13 00:00:42
我的代码:
import exifread
f = open('dfround2.jpg', 'rb')
time = []
tags = exifread.process_file(f)
print("Time information: \n")
for tag in tags.keys():
if 'Image DateTime' in tag:
print("DateTime : %s" % (tags[tag]))
time.append(tags[tag])
if 'EXIF DateTimeOriginal' in tag:
print("DateTimeOriginal : %s" % (tags[tag]))
time.append(tags[tag])
print("Tijd: \n", time)
如果我以后必须使用DateTime
和DateTimeOriginal
,最好的方法是什么?将它们放在变量中会更好吗?我怎么能这样做?
我想做的是: 获取图像的时间日期并将其放入时间线。所以我必须稍后在我的脚本中使用我的输出,但我不知道如何存储它。
答案 0 :(得分:0)
我只有大约80%的人确定我明白你的要求,但......
这会打印出你想要的字符串:
print("DateTimeOriginal : %s" % (tags[tag]))
这会存储一些您不想要的复杂tag
对象:
time.append(tags[tag])
你想要的只是你打印出的字符串,而不是tag
对象。
如果您查看printf
-style String Formatting的文档,转换类型%s
会为您提供:
String(使用
str()
转换任何Python对象。)
因此,如果您想存储使用%s
打印的相同内容,只需调用str()
,就像它一样:
time.append(str(tags[tag]))
我不确定您为什么要构建一个包含所有DateTime
和DateTimeOriginal
标记的字符串表示的列表,如果这样,但是如果这是你想要的,那是怎么做的。
答案 1 :(得分:0)
两种情况下都是相同的标记实例,但具有不同的string representations。
print tag # using tag.__str__
print [tag, tag] # using tag.__repl__ for each element
您可以将str(tag)
添加到列表中,也可以在再次阅读时使用str(element)
。
示例:
from exifread import process_file
with open('dfround2.jpg', 'rb') as f:
tags = process_file(f)
time = tags['Image DateTime']
orig = tags['EXIF DateTimeOriginal']
print [str(time), str(orig)]
# ['2014:12:05 18:12:09', '2013:07:20 15:53:30']
答案 2 :(得分:0)
尝试使用.printable
来获取字符串表示。实际上,如果您要检查exifread
的来源,您会看到str(tag)
返回printable
。
if 'Image DateTime' in tag:
print("DateTime : %s" % (tags[tag]))
time.append(tags[tag].printable)
if 'EXIF DateTimeOriginal' in tag:
print("DateTimeOriginal : %s" % (tags[tag]))
time.append(tags[tag].printable)