python - 检查列表条目是否包含在字符串中

时间:2014-03-28 10:05:15

标签: python list any

我有一个脚本,我正在浏览传递的列表(通过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'

这似乎不起作用。我对任何命令都抱有太多期待。我可以使用其他快捷方式进行此类查找吗?

由于

3 个答案:

答案 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中是否有currPathany(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

相关问题