在我的数组中获得正确的值

时间:2015-05-26 21:26:46

标签: python arrays

我试图只在数组列表中保存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)

如果我以后必须使用DateTimeDateTimeOriginal,最好的方法是什么?将它们放在变量中会更好吗?我怎么能这样做?

我想做的是: 获取图像的时间日期并将其放入时间线。所以我必须稍后在我的脚本中使用我的输出,但我不知道如何存储它。

3 个答案:

答案 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]))

我不确定您为什么要构建一个包含所有DateTimeDateTimeOriginal标记的字符串表示的列表,如果这样,但是如果这是你想要的,那是怎么做的。

答案 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)