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

时间:2013-11-11 07:00:00

标签: python dropbox dropbox-api

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

  

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

     

[路径,元数据]:

  

[path,nil]

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

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

因此,要查找创建的文件,我可以遍历条目列表并检查每个条目的第二个属性是否为非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!

1 个答案:

答案 0 :(得分:2)

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

请注意None不是字符串。 None == "None"将返回false。因此,您entry[1] != "None"的位置需要使用entry[1] != None