2

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

Delta 条目:每个条目是以下形式之一的 2 项列表:

[路径,元数据]:

或者

[路径,无]

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

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

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

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

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

它打印

./filename
None

即 ,None而不是nil。所以我对'None'而不是'nil'进行了字符串比较,但即使条目1是'None',比较也失败了。这让我很困惑。

我的整个代码如下。

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它也表明File has been added!

4

1 回答 1

2

在 Python 中,None是一个特殊的常量,其值通常称为nullornil值。出于某种原因,DropBox 文档nil在这种情况下使用术语而不是 Python 的术语None

请注意,这None不是字符串。 None == "None"将返回假。所以你有entry[1] != "None"你需要使用的地方entry[1] != None

于 2013-11-11T07:39:08.463 回答