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