python - 无法在 Python 上使用 Dropbox API 区分文件添加和文件删除

标签 python dropbox dropbox-api

我编写了一个 python 脚本来检查 Dropbox 文件夹中的文件添加/删除情况。 delta API说的是

Delta Entries: Each entry is a 2-item list of one of following forms:

[path, metadata]:

[path, nil]

每个条目都引用一个已更改(创建/修改/删除)的文件

当文件存在于 Dropbox 文件夹中时,元数据属性为非nil,当文件不存在时,即已被删除时(或者这样),元数据属性为 nil我明白了。如果我错了,请纠正我)

因此,要查找已创建的文件,我可以迭代条目列表并检查每个条目的第二个属性是否为非nil

但是,当我从 Dropbox 文件夹中删除文件后

for entry in next_cursor['entries']:
    print entry[0]
    print entry[1]

打印

./filename
None

即,,而不是nil。因此,我对“None”而不是“nil”进行了字符串比较,但即使条目 1为“无”,比较失败。这让我很困惑。

我的整个代码如下。

import dropbox
import sys

access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx'
client = dropbox.client.DropboxClient(access_token)

curr_cursor_file = open("cursor.txt", "r")
curr_cursor = curr_cursor_file.read()
curr_cursor_file.close()

next_cursor = client.delta(curr_cursor)
#print next_cursor
curr_cursor_file = open("cursor.txt", "w")
curr_cursor_file.write(next_cursor['cursor'])
curr_cursor_file.close()

if len(next_cursor['entries']) > 0:
    for entry in next_cursor['entries']:
        if entry[1] != "None":
            print "File added!"
            print entry[0]
            print entry[1]
        else:
            print "No new files have been added. But files have been removed."
else:
    print "No files have changed."

即,即使entry[1]打印None,它也表明文件已被添加!

最佳答案

在 Python 中,None 是一个特殊常量,其值通常称为 nullnil 值。由于某种原因,DropBox 文档在本例中使用术语 nil,而不是 Python 的术语 None

请注意,None 不是字符串。 None == "None" 将返回 false。因此,如果您有 entry[1] != "None",您需要使用 entry[1] != None 来代替。

关于python - 无法在 Python 上使用 Dropbox API 区分文件添加和文件删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900578/

相关文章:

python - 我如何使用 Ruby 创建一个 "EXE",就像 DropBox 使用 Python 一样?

ios - 将文件上传到 Dropbox 中的特定文件夹

python - 作为初学者使用库还是编写自己的代码?

python - ModelChoiceField 查询集到另一个 OneToOne 相关表

python - 在Python中递归地合并字符串列表中的连续元素

android - 将文件从手机上传到android中的保管箱

java - 验证本地计算机中的文件是否是最新的 Dropbox 服务器

java - 有没有适用于 java 的 Dropbox Sync 库?

python 滚动解决方法