2017-07-03 88 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)