Mac OS照片:以编程方式访问最近删除的照片文件夹?

2024-09-27 23:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

为了对我的照片进行深度学习模型自动分类,我想将我所有删除的照片复制到Mac的照片中(不幸的是,“恢复”照片将其放回了主相册,因此我不知道它最初是被删除的)

如何访问已删除的照片? 看看“照片”包,数据组织相当模糊

同时:我如何访问每张照片上的“收藏夹”标签(我的模型应分类为收藏夹/已删除/未删除)

一开始我是个Python主义者

Thx, 罗曼

编辑#1

我找到了这个包:https://pypi.org/project/osxphotos/#osxphotos 这应该可以解决问题,但我有一个错误:

import osxphotos
path = "/Users/romain/Pictures/Photothèque.photoslibrary/"
photosdb = osxphotos.PhotosDB(path)

给出:

ValueError                                Traceback (most recent call last)
/Applications/anaconda3/envs/python38/lib/python3.8/site-packages/osxphotos/photosdb/photosdb.py in _process_database4(self)
    798             try:
--> 799                 self._dbphotos[uuid]["imageDate"] = datetime.fromtimestamp(row[5] + td)
    800             except ValueError:

ValueError: year 0 is out of range

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-8-42282d7447c7> in <module>
      1 import osxphotos
      2 path = "/Users/romain/Pictures/Photothèque.photoslibrary/"
----> 3 photosdb = osxphotos.PhotosDB(path)

/Applications/anaconda3/envs/python38/lib/python3.8/site-packages/osxphotos/photosdb/photosdb.py in __init__(self, dbfile, *dbfile_)
    287 
    288         if int(self._db_version) <= int(_PHOTOS_4_VERSION):
--> 289             self._process_database4()
    290         else:
    291             self._process_database5()

/Applications/anaconda3/envs/python38/lib/python3.8/site-packages/osxphotos/photosdb/photosdb.py in _process_database4(self)
    799                 self._dbphotos[uuid]["imageDate"] = datetime.fromtimestamp(row[5] + td)
    800             except ValueError:
--> 801                 self._dbphotos[uuid]["imageDate"] = datetime.date(1970, 1, 1)
    802 
    803             self._dbphotos[uuid]["mainRating"] = row[6]

TypeError: descriptor 'date' for 'datetime.datetime' objects doesn't apply to a 'int' object

编辑#2

我修改了文件:

#self._dbphotos[uuid]["imageDate"] = datetime.date(1970, 1, 1)
self._dbphotos[uuid]["imageDate"] = datetime(1970, 1, 1)

Tags: pathinselfdatetimeuuidprocessdatabase照片
1条回答
网友
1楼 · 发布于 2024-09-27 23:28:42

我是你引用的软件包的作者。首先,感谢您为这个bug打开了一个问题,我已经修复了这个bug,并且测试用例应该首先捕获到这个bug。我还添加了一个新的“intrash”属性,以便您可以访问最近删除的照片。您需要通过git更新到v0.30.0,如果使用pip,则需要执行pip install upgrade osxphotos

这里有一个简短但完整的程序,可以导出已删除的照片、未删除的照片和喜爱的照片。它缺乏错误检查等,但应该足以让你开始

import os
import osxphotos

# update this to your export path
export_path = "/Users/romain/Desktop/export"


def export_photos(export_path, photo_list):
    # create destination directory if needed
    if not os.path.isdir(export_path):
        os.makedirs(export_path)

    for photo in photo_list:
        if not photo.ismissing:
            print(f"Exporting {photo.original_filename} to {export_path}")
            photo.export(export_path, photo.original_filename)
        else:
            print(f"Skipping missing photo {photo.original_filename}")


def main():
    photosdb = osxphotos.PhotosDB()

    not_deleted = photosdb.photos()
    favorite = [p for p in photosdb.photos() if p.favorite]
    deleted = photosdb.photos(intrash=True)

    print("Exporting not deleted")
    export_photos(os.path.join(export_path, "not_deleted"), not_deleted)

    print("Exporting deleted")
    export_photos(os.path.join(export_path, "deleted"), deleted)

    print("Exporting favorites")
    export_photos(os.path.join(export_path, "favorite"), favorite)


if __name__ == "__main__":
    main()

相关问题 更多 >

    热门问题