我有一个目录,其中包含许多名为如下的 .txt 文件:
factor1.txt
factor2.txt
factor3.txt
factor4.txt
factor1-factor2.txt
factor2-factor3.txt
现在我想创建一个函数,它接受一个因子名称列表,例如 searchFiles(listOfFactorNames)
,然后返回此目录中名称至少包含以下之一的所有文件的列表因子名称列表中指定的因子名称。
例如,如果 listOfFactorNames=['factor1','factor4']
则 searchFiles(listOfFactorNames)
应返回列表 ['factor1.txt' ,'factor4.txt','factor1-factor2.txt']
到目前为止我已经写了以下内容:
def search_for_files(listOfFactorNames,path):
listOfFiles=os.listdir(path)
resList=[]
for f in listOfFiles:
for factor in listOfFactorNames:
if factor in f:
resList.append(f)
return list(set(resList)
然而,这看起来不太优雅,我想知道是否有一种更简单/更智能的方法来实现相同的目的。特别是,我从结果列表中删除重复项的最后一行。
感谢您的帮助。
最佳答案
我会这样做:
def search_for_files(listOfFactorNames, path):
for f in os.listdir(path):
for factor in listOfFactorNames:
if factor in f:
yield f
break
break
将防止重复。我将整个事情变成了一个生成器,以便在您实际上不需要列表的情况下提高效率,例如:
for f in search_for_files(...):
print f
如果您确实需要列表,只需:
files = list(search_for_files(...))
关于python - 返回名称包含字符串的所有文件的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252389/