使用dropbox API下载指定文件夹中的所有图像,而不是子文件夹

时间:2013-12-22 07:40:23

标签: python json api dropbox dropbox-api

我想编写可以使用Dropbox API下载指定文件夹中的所有图像而不是Dropbox中的子文件夹的代码。到目前为止,我已经写了这个

 def download_cont(self, folderName):

    fname = folderName
    folder_metadata = self.client.metadata('/' + fname)
    print folder_metadata

这是元数据:

    {u'size': u'0 bytes', u'hash': u'3fad7ce5537e0941f8768413cdb7b84d', u'bytes': 0, u'thumb_exists': False, u'rev': u'111c24338d', u'modified': u'Sun, 22 Dec 2013 02:09:41 +0000', u'path': u'/images', u'is_dir': True, u'icon': u'folder', u'root': u'dropbox', u'contents': [{u'size': u'56.2 KB', u'rev': u'131c24338d', u'thumb_exists': True, u'bytes': 57538, u'modified': u'Sun, 22 Dec 2013 02:16:34 +0000', u'mime_type': u'image/png', u'path': u'/images/296px-Manchester_United_FC_crest.svg.png', u'is_dir': False, u'icon': u'page_white_picture', u'root': u'dropbox', u'client_mtime': u'Sun, 22 Dec 2013 02:16:34 +0000', u'revision': 19}, {u'size': u'9.8 KB', u'rev': u'141c24338d', u'thumb_exists': True, u'bytes': 9999, u'modified': u'Sun, 22 Dec 2013 02:16:36 +0000', u'mime_type': u'image/jpeg', u'path': u'/images/images.jpg', u'is_dir': False, u'icon': u'page_white_picture', u'root': u'dropbox', u'client_mtime': u'Sun, 22 Dec 2013 02:16:36 +0000', u'revision': 20}, {u'size': u'77 KB', u'rev': u'151c24338d', u'thumb_exists': True, u'bytes': 78798, u'modified': u'Sun, 22 Dec 2013 02:16:39 +0000', u'mime_type': u'image/jpeg', u'path': u'/images/manchester-united-fc-3d.jpg', u'is_dir': False, u'icon': u'page_white_picture', u'root': u'dropbox', u'client_mtime': u'Sun, 22 Dec 2013 02:16:39 +0000', u'revision': 21}, {u'size': u'220.9 KB', u'rev': u'121c24338d', u'thumb_exists': True, u'bytes': 226209, u'modified': u'Sun, 22 Dec 2013 02:15:51 +0000', u'mime_type': u'image/jpeg', u'path': u'/images/manchester-united-plc-logo.jpg', u'is_dir': False, u'icon': u'page_white_picture', u'root': u'dropbox', u'client_mtime': u'Sun, 22 Dec 2013 02:15:51 +0000', u'revision': 18}, {u'size': u'0 bytes', u'rev': u'161c24338d', u'thumb_exists': False, u'bytes': 0, u'modified': u'Sun, 22 Dec 2013 02:16:53 +0000', u'path': u'/images/sub', u'is_dir': True, u'icon': u'folder', u'root': u'dropbox', u'revision': 22}], u'revision': 17}

据我所知,我必须遍历JSON对象并使用元数据中的'contents'下载每个文件,但我不知道如何执行此操作。请帮忙。

1 个答案:

答案 0 :(得分:2)

你是对的。元数据的contents成员将告诉您列出的文件夹中的文件(和子文件夹)。每个条目都有一个path成员,告诉你它的完整路径和一个is_dir成员,告诉你该条目是一个目录(相对于一个文件)。这里有一些代码使用Python的列表解析来获取指定文件夹中文件的所有路径,然后下载每个文件:

def download_cont(self, folder_name):
    for path in [entry['path'] for entry in self.client.metadata(folder_name)['contents'] if not entry['is_dir']]:
        name = os.path.basename(path)
        print 'Saving "%s"...' % name
        with open(name, 'wb') as out:
            with self.client.get_file(path) as f:
                out.write(f.read())

更新:如果您没有使用Dropbox Python SDK的最新版本(2.0),则不应使用嵌套的with语句。只需这样做:

print 'Saving "%s"...' % name
with open(name, 'wb') as out:
    out.write(self.client.get_file(path).read())