2017-07-03 116 views
0

我创建了一个具有特定扩展名的列表,我想通过目录C:\和D:\来获得。但是我有一个问题获取多个文件。如果我只是将'python.exe'放入列表中并删除'Hearthstone.exe',它可以找到并打印并将其附加到VIP_files列表中。但是,只要我添加'Hearthstone.exe'就没有任何反应,甚至没有给出'python.exe'路径。这是我的,我不确定我做错了什么。如何通过迭代获取列表中的所有文件?

import os 
from os.path import join 

lookfor = ['python.exe','Hearthstone.exe'] 
VIP_files = [] 

for root, dirs, files in os.walk('C:\\', 'D:\\'): 
    if lookfor in files: 
     print ("found: %s" % join(root, lookfor)) 
     VIP_files.append(root+ lookfor) 

print(VIP_files) 
+0

是因为这些文件将按照字母顺序,'lookfor'应该是按字母顺序排列'lookfor = [” Hearthstone.exe','python.exe']' – Stack

+0

我编辑的错字不是问题吧? ''heartstone.exe'确实有一个结束报价?你必须做'如果有(x在文件中寻找x)''。 –

+0

字母顺序是问题。 – Stack

回答

1

lookfor是一个列表,所以是files。您要求python在if中执行的操作是检查列表是否在列表中,如[['python.exe','Hearthstone.exe'], ...],这当然不存在。

速战速决是让lookfor一组,然后用一套十字路口这样的:

import os 
from os.path import join 

lookfor = {'python.exe','Hearthstone.exe'} # {} set syntax 
VIP_files = [] 

for root, dirs, files in os.walk('C:\\', 'D:\\'): 
    found = lookfor.intersection(files) 
    for f in found: 
     print("found: {}".format(root + f)) 
     VIP_files.append(root + f) 

print(VIP_files)