如何通过迭代获取列表中的所有文件?

时间:2017-07-03 15:38:09

标签: python os.path

我创建了一个列表,其中包含我希望通过目录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)

1 个答案:

答案 0 :(得分:1)

lookfor是一个列表,files也是如此。您在if中要求python执行的操作是检查列表是否在列表中,例如[['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)