假设在我的文件系统中存在以下目录:
在我的Python代码中,我有以下路径:
我怎样才能确定路径中只存在
/foo/bar/
在我的Python代码中,我有以下路径:
/foo/bar/baz/quix/
我怎样才能确定路径中只存在
/foo/bar/
部分?我可以递归地遍历路径,并逐步进行检查,但是否有更简单的方法呢?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'
while
循环和os.path.dirname()
函数就可以满足要求。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
"/home/moin/Desk"
。 - Sevanteripath_string '/home/moin/Desktop'
,那么 os.path.split(path_string)
将返回元组 ('/home/moin', 'Desktop')
。我认为你把这个“元组”部分和每个字符的迭代混淆了。 - Moinuddin Quadrifor i in filter(lambda s: s, sample_path.split('/')):
_path = os.path.join(_path, i)
if os.path.exists(_path):
print "correct path"
os.sep
这个函数。 - armakNone
替换 lambda 函数,这样也可以过滤掉假值。 - Sevanteri嗯,我认为唯一的方法是递归工作...虽然,我会从目录树向上工作。代码实现起来并不太难:
import os
def doesItExist(directory):
if not os.path.exists(directory):
doesItExist(os.path.dirname(directory)
else:
print "Found: " + directory
return directory
foo/
已经存在,但是我创建了路径foo/bar/baz
,那么我希望能够回到只存在foo/
的状态。 - Pavel Penevos.makedirs
不会告诉我它创建了哪些目录,所以我必须自己找出来。 - Pavel Penev