我正在使用 Python 将我的 flickr 照片与本地硬盘照片目录进行比较。
为了做到这一点,我在 Python 中使用 OAuth 并获取我在 flickr 中拥有的每个文件夹/专辑的 etree 列表。flickr 上的文件夹/专辑内容“应该”与我的本地副本目录匹配。
当我的本地驱动器和 flickr 上的照片列表中没有项目时,我希望我的脚本告诉我(反之亦然)。
flickr 照片的“标题”字段应与 Linux 上的文件名相同,Linux 上的目录名称将/应该与 flickr 上的相册名称匹配。这就是我目前的设置方式。
我想知道在 Python 中比较这些项目列表(etree 节点项目与os.listdir()
项目)的最佳和最有效的方法是什么?
除非必要,否则我宁愿不使用sort()
bash 将任何管道输出排序为文件名。如果可能的话,我想把所有东西都保存在 Python 中,因为我只是在学习它。
我可以使用os.listdir()
它并将其与XML.Etree
返回到 flickr 的节点进行比较,但是进行这种比较的最佳方法是什么?
请记住,在比较来自 flickr 和 Linux 的项目时,这些列表可能不同并且可能没有排序。
我编写了以下代码片段以从 flickr 获取结果:
...oauth code above...
sets = flickr.photosets.getList(user_id=user_id)
print ("Total sets: " + sets.find('photosets').attrib['total'])
all_sets = sets.find('photosets').findall('photoset')
for each_set in all_sets:
for node in each_set.findall('title'):
print ("photoset: " + each_set.get('id') + ", " + node.text + ", photos: ", each_set.get('photos'))
all_photos = flickr.photosets.getPhotos(user_id=user_id, photoset_id=each_set.get('id'))
photos = all_photos.find('photoset')
for photo in photos:
print (photo.get('title'))
上述代码的输出示例如下:
photoset: 72157659163323894, Birthday Party - Nov 21, 2015, photos: 131
...
2015:11:21-16:11:14-IMG_20151121_161114372
2015:11:21-16:11:10-IMG_20151121_161109739
2015:11:21-16:10:36-IMG_20151121_161035497
2015:11:21-15:47:14-IMG_20151121_154713671
2015:11:21-15:43:17-IMG_20151121_154317180
2015:11:21-15:43:15-IMG_20151121_154315539
2015:11:21-15:23:42-IMG_20151121_152342348
2015:11:21-15:23:11-IMG_20151121_152311411
...
2015:11:21-16:21:19-DSC_0603
2015:11:21-16:21:13-DSC_0602
2015:11:21-16:21:11-DSC_0601
2015:11:21-16:21:09-DSC_0600
2015:11:21-16:21:07-DSC_0599
2015:11:21-16:21:05-DSC_0598
2015:11:21-16:20:13-DSC_0597
2015:11:21-16:20:09-DSC_0596
2015:11:21-16:19:59-DSC_0595
2015:11:21-16:19:56-DSC_0594
2015:11:21-16:19:55-DSC_0593
...
getPhotos 的 API 在这里:https ://www.flickr.com/services/api/flickr.photosets.getPhotos.htm ,其中显示了一些示例 xtree/XML 输出。
Etree API:https ://docs.python.org/2/library/xml.etree.elementtree.html