Python:如果字符串中的子字符串返回字符串

时间:2012-12-14 18:10:40

标签: python string list substring

我有两个列表,一个有一堆路径ex:“C:\ vol001 \ ABC123.xls”,另一个有一堆名字ex:“ABC123”。如果名称在路径中,我正在寻找路径。所以对于上面的例子,程序会吐出“C:\ vol001 \ ABC123.xls”。

到目前为止,我一直在尝试使用in运算符,但我不确定如何返回路径。

for name in list1:
    if name in list2:
        return path in list2

5 个答案:

答案 0 :(得分:2)

您的初始解决方案不正确。实际上,你问的是“有'名称'相等列表中的一个项目”。但是,如果你想测试包含,即“是否'名称'是 列表中的任何项目的一部分”,你应该使用类似下面的代码:

for name in l2:
    return [x for x in l1 if name in x]

匹配路径的返回列表。实际上只有2个用于循环以更加pythonic的方式重写(因为我记得它被称为'列表理解',如果我错了,更熟悉术语的人会修复我。)

答案 1 :(得分:0)

我认为这就是你想要的:

for path in list1:
    for name in list2:
        if name in path:
            return path
else:
    return None # not found

答案 2 :(得分:0)

这对你有用吗?

new_paths = []                          # create list for the paths to be kept
for path in paths:                      # cycle through paths
    for name in names:                  # cycle through names
        if name in path:                # check if path contains the name
            new_paths.append(path)      # path is good, so add to the list

答案 3 :(得分:0)

考虑到您的评论,名称在路径中的位置无关紧要(即“C:\ ABC123 \ test.png”和“C:\ vol01 \ ABC123.xml”都与查询匹配“ ABC123“),我们没有考虑文件系统路径的结构,但可以处理纯字符串匹配。

paths所有路径的列表,names所有名称的列表,并name您要查找的名称

(path for path in paths if name in path)

是生成器,产生与名称匹配的所有路径。

dict ( ( (name, [path for path in paths if name in path] ) for name in names) )

创建一个字典,其键是名称,其值是包含相应名称的所有路径。你可以像这样使用它:

paths = [....]
names = [....]
d = dict ( ( (name, [path for path in paths if name in path] ) for name in names) )
print ('The name "ABC" is contained in: {}'.format (d ['ABC'] ) )
print ('The name "XYZ" is contained in: {}'.format (d ['XYZ'] ) )
print ('The name "pron" is contained in: {} different paths'.format (len (d ['pron'] ) if 'pron' in d else 0) )

答案 4 :(得分:-1)

return os.path.dirname(name)

请注意,如果您还没有,则必须运行import os.path。请参阅documentation for the os.path module