我有一个脚本,我正在浏览传递的列表(通过csv文件)路径。我想知道如何确定我当前使用的路径是否先前已被管理(作为父项的子目录)。
我保留了这样的托管路径列表:
pathsManaged = ['/a/b', '/c/d', '/e']
因此当/如果下一个路径是'/e/a'
时,我想检查列表中pathsManaged
列表中是否存在此路径的父路径。
到目前为止我的尝试:
if any(currPath in x for x in pathsManaged):
print 'subdir of already managed path'
这似乎不起作用。我对任何命令都抱有太多期待。我可以使用其他快捷方式进行此类查找吗?
由于
答案 0 :(得分:2)
也许:
from os.path import dirname
def parents(p):
while len(p) > 1:
p = dirname(p)
yield p
pathsManaged = ['/a/b', '/c/d', '/e']
currPath = '/e/a'
if any(p in pathsManaged for p in parents(currPath)):
print 'subdir of already managed path'
打印:
subdir of already managed path
答案 1 :(得分:0)
如果我理解正确,您想要检查pathsManaged
中是否有currPath
是any(x in currPath for x in pathsManaged)
any(currPath.startswith(x) for x in pathsManaged)
os.path.dirname(currPath) in pathsManaged
的一部分,但您正在这样做。
根据您的需要,其中一个适合您:
{{1}}
答案 2 :(得分:0)
假设pathsManaged包含绝对路径(否则我认为所有赌注都已关闭),那么您可以使currPath成为绝对路径,并查看它是否以pathsManaged中的任何路径开头。或者在Python中:
def is_path_already_managed(currPath):
return any(
os.path.abspath(currPath).startswith(managed_path)
for managed_path in pathsManaged)
从概念上讲,我觉得pathsManaged应该是set
,而不是list
。