Dropbox API不会返回列表中的所有文件

时间:2018-11-25 01:37:58

标签: python dropbox-api

我正尝试使用python dropbox API从我的保管箱帐户中获取完整的文件列表,以稍后比较本地和远程文件夹,并仅在Raspberry PI上下载更改的文件。因此,现在我需要帐户上的当前文件列表。我正在尝试通过使用以下代码来实现这一目标:

client = dropbox.Dropbox("ACCESS_TOKEN")
metadata = client.files_list_folder("", recursive=True, include_deleted=False, include_media_info=False)
flist = []
if metadata.has_more == True:
    m1 = metadata.entries
    cur = metadata.cursor
    for i in m1:
        if isinstance(i, dropbox.files.FileMetadata):
            flist.append([i.name])
    # flist now has 2000 items
    m2 = client.files_list_folder_continue(cur)
    while m2.has_more == True:
        for i in m2.entries:
            if isinstance(i, dropbox.files.FileMetadata):
                flist.append([i.name])
        cur = m2.cursor
        m2 = client.files_list_folder_continue(cur)

总共给我4971个文件。但是,许多不同的文件夹中都有5252个文件(可能)。我得到很多不同的数字。 Windows使用控制台为我提供了5252个文件,使用资源管理器为我提供了2344个文件。 Unix使用控制台为我提供了5260个文件,使用文件管理器为我提供了5288个文件...
我注意到最近(几天前)添加/编辑的许多文件都丢失了。之后,我尝试了一个稍微不同的代码:

dbx = dropbox.Dropbox("ACCESS_TOKEN")
result = dbx.files_list_folder("", recursive=True, include_deleted=False, include_media_info=False)
file_list = []

def process_entries(entries):
    for entry in entries:
        if isinstance(entry, dropbox.files.FileMetadata):
            file_list.append([entry.name])

process_entries(result.entries)

while result.has_more:
    result = dbx.files_list_folder_continue(result.cursor)
    process_entries(result.entries)

print(len(file_list))

此代码仅提供1997个文件,但列表包含新文件。我不知道为什么会这样,因为这两个代码在做同样的事情,但是都不能给我正确的文件列表。

编辑:将第二个代码相应地更改为Gregs注释。与同步的语言环境Dropbox文件夹相比,现在获取许多文件。

0 个答案:

没有答案