从子字符串中查找文件名

时间:2012-07-19 21:16:19

标签: python string file

我有一个我保存的文件名列表,如下所示:

filelist = os.listdir(mypath)

现在,假设我的一个文件类似于“KRAS_P01446_3GFT_SOMETHING_SOMETHING.txt”。

但是,我提前知道的是我有一个名为“KRAS_P01446_3GFT_*”的文件。如何仅使用“KRAS_P01446_3GFT_*”从文件列表中获取完整文件名?

作为一个更简单的例子,我做了以下内容:

mylist = ["hi_there", "bye_there","hello_there"]

假设我有字符串"hi"。我如何让它返回mylist[0] = "hi_there"

谢谢!

4 个答案:

答案 0 :(得分:2)

在第一个示例中,您可以使用glob模块:

import glob
import os
print '\n'.join(glob.iglob(os.path.join(mypath, "KRAS_P01446_3GFT_*")))

执行此 os.listdir

第二个例子似乎与第一个例子有关(X-Y problem?),但这是一个实现:

mylist = ["hi_there", "bye_there","hello_there"]
print '\n'.join(s for s in mylist if s.startswith("hi"))

答案 1 :(得分:0)

如果你的意思是“给我所有以某些前缀开头的文件名”,那么这很简单:

[fname for fname in mylist if fname.startswith('hi')]

如果你的意思更复杂 - 例如,“some _ * _ file”匹配“some_good_file”和“some_bad_file”等模式,那么请查看正则表达式模块。

答案 2 :(得分:0)

mylist = ["hi_there", "bye_there","hello_there"]
partial = "hi"
[fullname for fullname in mylist if fullname.startswith(partial)]

答案 3 :(得分:0)

如果列表不是很大,你可以按照这个项目进行检查。

def findMatchingFile (fileList, stringToMatch) :
    listOfMatchingFiles = []

    for file in fileList:
        if file.startswith(stringToMatch):
            listOfMatchingFiles.append(file)

    return listOfMatchingFiles

还有更多" pythonic"这样做的方式,但我更喜欢这个,因为它更具可读性。