Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据返回的不区分大小写的增量从文件系统中删除文件?_Python_Dropbox_Dropbox Api - Fatal编程技术网

Python 如何根据返回的不区分大小写的增量从文件系统中删除文件?

Python 如何根据返回的不区分大小写的增量从文件系统中删除文件?,python,dropbox,dropbox-api,Python,Dropbox,Dropbox Api,我正试图在Dropbox核心API python SDK中编写一段代码来实现这个特殊情况 [路径,无]:表示Dropbox上的路径中没有文件/文件夹。要更新本地状态以进行匹配,请删除路径上的任何内容,包括所有子项(有时还将获得子项的“删除”增量项,但这不能保证)。如果您的本地州在路径上没有任何内容,请忽略此条目 API注意到返回的[path]不区分大小写 记住:Dropbox以不区分大小写但保留大小写的方式处理文件名。为了便于实现这一点,上面的路径字符串是实际路径的小写版本。元数据dict具有原

我正试图在Dropbox核心API python SDK中编写一段代码来实现这个特殊情况

[路径,无]:表示Dropbox上的路径中没有文件/文件夹。要更新本地状态以进行匹配,请删除路径上的任何内容,包括所有子项(有时还将获得子项的“删除”增量项,但这不能保证)。如果您的本地州在路径上没有任何内容,请忽略此条目

API注意到返回的
[path]
不区分大小写

记住:Dropbox以不区分大小写但保留大小写的方式处理文件名。为了便于实现这一点,上面的路径字符串是实际路径的小写版本。元数据dict具有原始的保留大小写的路径

如果我不知道路径的大小写保留版本,如何从系统中删除有问题的文件或目录


如果相关的话,我的操作系统是Linux,尽管我希望得到一个能够在Windows上运行的解决方案,如果可能的话。

如果您需要能够从小写路径恢复具有原始大小写的路径(例如,对于本地区分大小写的文件系统),一种解决方案是保持降低路径到原始路径客户端的映射。具体的实现细节由您决定,但是任何简单的键值存储都可能完成这项工作


然后,当您得到其中一个删除时,您可以使用此映射查找原始路径并相应地进行处理。

我知道这有点晚,但我只是偶然遇到了相同的问题,并提出了不同的解决方案。也许有人会喜欢这种方法

因为我的API只在linux服务器上使用,而且删除对我来说比较少见,所以我依靠LinuxFind命令来帮助我

    # LINUX ONLY
    cmd = "find {0} -iwholename '{1}'".format(basepath, caseInsensitivePath)
    with os.popen(cmd) as f:
        caseSensitivePath = f.read()[:-1] # -1 to remove the '\n'
        # error if more than 1 line
        if caseSensitivePath.find('\n') != -1:
            print "Found multiple results including: \n", caseSensitivePath
            msg = "[!]ERROR Could not delete {0}. Multiple case-sensitive results exist".format(caseInsensitivePath)
            raise Exception(msg)
        else:
            return caseSensitivePath
basepath是查找的基本路径。我建议找到一种比根“/”更精确的方法。在我的例子中,我已经在sync文件夹中有一个路径列表,因此我能够进行如下比较:

caseInsensitivePath = caseInsensitivePath.lower()
# find basepath
basepath = assets_root
for folder in self.myDict.keys():
    if caseInsensitivePath.lower().startswith(folder.lower()):
        basepath = folder

caseInsensitivePath是路径名。

谢谢,我考虑过这个方法,但想知道是否有更简单的方法。谢谢这个解决方案。但这对我的情况不起作用,因为删除很常见(毕竟是一个文件共享应用程序),每次进行系统调用显然效率低下+1.:)你是怎么解决的?您是否使用映射创建了sqlite或dbm文件?