我有两个列表,一个有一堆路径ex:“C:\ vol001 \ ABC123.xls”,另一个有一堆名字ex:“ABC123”。如果名称在路径中,我正在寻找路径。所以对于上面的例子,程序会吐出“C:\ vol001 \ ABC123.xls”。
到目前为止,我一直在尝试使用in运算符,但我不确定如何返回路径。
for name in list1:
if name in list2:
return path in list2
答案 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。