使用 Dropbox 确定文件夹或文件 Python API

Determine if folder or file using Dropbox Python API

我正在尝试使用 Dropbox API v2 获取所有文件夹和所有文件的列表,并查看与每个文件夹和文件关联的元数据。

我已经能够让它列出我的 Dropbox 根目录中的所有文件和文件夹,以及 return 元数据,但是我不知道如何确定输出元数据是否用于文件 FileMetadata 或文件夹 FolderMetadata.

当我打印查询中的 returned 值时,它会将它们显示为文件或文件夹

import dropbox 

def print_metadata(dbfile):
    md = dbx.files_get_metadata(dbfile)
    print (md)

dbx = dropbox.Dropbox('MYAPIKEY')

myfiles = ['/someotherfile.jpg', '/Camera Uploads']

for myfile in myfiles:
    print_metadata(myfile)

文件:

FileMetadata(name='someotherfile.jpg', id='id:1234567890', client_modified=datetime.datetime(2013, 1, 15, 20, 51, 3), server_modified=datetime.datetime(2017, 8, 24, 21, 32, 52), rev='1234567890', size=162012, path_lower='/someotherfile.jpg', path_display='/someotherfile.jpg', parent_shared_folder_id=None, media_info=None, sharing_info=None, property_groups=None, has_explicit_shared_members=None, content_hash='1234567890')

文件夹:

FolderMetadata(name='Camera Uploads', id='id:0987654321', path_lower='/camera uploads', path_display='/Camera Uploads', parent_shared_folder_id=None, shared_folder_id=None, sharing_info=None, property_groups=None)

然而,由于我无法确定 python 中的哪个是哪个,我无法打印特定的元数据值,例如文件大小

print(md.size)

AttributeError: 'FolderMetadata' object has no attribute 'size'

我需要做什么来检查 returned 对象是文件还是文件夹,或者只指定列表中的 return 文件夹或 return 文件?这样我应该能够遍历整个保管箱中的所有文件夹和文件。

您可以使用isinstance来检查对象的类型,可以是FileMetadataFolderMetadataDeletedMetadata。这里有一个例子:

https://github.com/dropbox/dropbox-sdk-python/blob/master/example/updown.py#L91

如果您不想通读已接受的答案代码,可以使用此 function/line:

def isFile(dropboxMeta):
    return isinstance(dropboxMeta,dropbox.files.FileMetadata)