python - 返回名称包含字符串的所有文件的函数

标签 python python-2.7 function

我有一个目录,其中包含许多名为如下的 .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/

相关文章:

python - 是否有一个库可以针对 SQL 请求对我的 Django 应用程序进行基准测试?

python - Beautiful Soup 和 Unicode 问题

python - 将 lambda 函数应用于列在 pandas 中失败

python - Python2 PriorityQueue 和 Python3 PriorityQueue 的 put 方法有什么区别吗?

python - 如何在PyQt4中加载和保存数据?

python - 编写一个 pandas/python 函数,它需要在 pandas 数据框中输入多列

javascript - 访问影子 DOM 中的元素

javascript - 如何在没有链接的情况下调用函数链中的任何函数?

C++初学者声明涉及结构数组的函数

python - SciPy 警告消息 : "Ill-conditioned matrix detected"