如何检查python中存在多少路径

如何检查python中存在多少路径,python,path,directory,Python,Path,Directory,假设在我的文件系统上存在以下目录: /foo/bar/ 在我的python代码中,我有以下路径: /foo/bar/baz/quix/ 我如何判断路径中只有/foo/bar/部分存在 我可以递归地遍历路径并一步一步地检查它,但有没有更简单的方法?我实际上不了解您是否希望检查每个路径或达到某个特定级别的要求。但是对于简单的健全性检查,您只需在整个路径中迭代创建路径并检查健全性 for i in filter(lambda s: s, sample_path.split('/')): _pa

假设在我的文件系统上存在以下目录:

/foo/bar/
在我的python代码中,我有以下路径:

/foo/bar/baz/quix/
我如何判断路径中只有
/foo/bar/
部分存在


我可以递归地遍历路径并一步一步地检查它,但有没有更简单的方法?

我实际上不了解您是否希望检查每个路径或达到某个特定级别的要求。但是对于简单的健全性检查,您只需在整个路径中迭代创建路径并检查健全性

for i in filter(lambda s: s, sample_path.split('/')):
  _path = os.path.join(_path, i)
   if os.path.exists(_path):
      print "correct path"

嗯,我认为唯一的方法是递归工作。。。尽管如此,我还是会整理目录树。代码并不难实现:

import os

def doesItExist(directory):
    if not os.path.exists(directory):
        doesItExist(os.path.dirname(directory)
    else:
        print "Found: " + directory
        return directory

在标准库中没有简单的函数,但实际上并不难实现

这里有一个函数,它接受一条路径并只返回确实存在的路径

In [129]: def exists(path):
     ...:     if os.path.exists(path): return path
     ...:     return exists(os.path.split(path)[0])
     ...:

In [130]: exists("/home/sevanteri/src/mutta/oisko/siellä/jotain/mitä/ei ole/")
Out[130]: '/home/sevanteri/src'

我认为使用
os.path.dirname()
进行一个简单的
while
循环就足够了

path_string = '/home/moin/Desktop/my/dummy/path'
while path_string:
    if not os.path.exists(path_string):
        path_string = os.path.dirname(path_string)
    else:
        break
# path_string = '/home/moin/Desktop'  # which is valid path in my system

我想要一个函数,返回已经存在的路径部分,以便跟踪我创建的目录。是的,我知道我可以做一些与你的代码类似的事情,但我想知道是否有一个函数已经可以做类似的事情了。@Sevanteri谢谢你,我不知道
os.sep
.aa我已经删除了注释。。。当使用路径时,您应该使用os.sep进行拆分。您可以将lambda函数替换为just
None
,它还将过滤掉错误值。检查字符串中每个字符的路径并不是一个好主意。甚至可能以错误的结果结束。假设主文件夹中有“桌面”和“桌面”。你的脚本将以“
”/home/moin/Desk“
而告终。@Sevanteri:我的代码不是这样做的。它将检查每个文件夹,而不是字符。例如:如果
path\u string'/home/moin/Desktop'
,那么
os.path.split(path\u string)
将返回
('/home/moin',Desktop')的元组。
。我想你对这个
元组
部分和每个元组的迭代都感到困惑char@downvoter:请同时说明否决投票的原因??我讨厌这个匿名部分。不要使用os.path.split并使用[0],最好使用os.path.dirname。dirname就是用来做这个功能的。@thiruvenkadam:是的,你说得对。更新了答案为什么您想知道最多存在哪条路径?如果是出于日志记录的目的,说完整路径不存在就足够了。@thiruvenkadam我想跟踪代码创建的目录,以便以后恢复状态。因此,如果
foo/
存在,但我创建了路径
foo/bar/baz
,那么我希望能够恢复到只存在
foo/
的状态。然后在创建目录时,您应该保留恢复点,就像创建此目录一样,而不是查找以前存在的目录结构。那会更干净。就像在/foo下创建bar目录一样,最好跟踪/foo/bar创建的目录,而不是跟踪/foo已经存在的目录。我在您的用例中遗漏了什么吗?很遗憾,
os.makedirs
没有告诉我它创建了什么目录,所以我必须自己弄清楚。os.makedirs应该只在受控环境中使用。就像您需要在现有virtualenv下生成一个目录结构一样,它肯定不存在。在所有其他情况下,最佳实践是使用makedir。即使makedir减少了编写的代码,并且看起来很吸引人,但如果您正在接触不同的路径或不确定现有路径,最好的方法是使用makedir一次创建一个目录以进行还原。如果从根目录开始而不是检查整个路径,您也可以进行迭代:)