1

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

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

4 回答 4

2

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

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

这样做不是os.listdir.

第二个例子似乎与第一个(XY 问题?)关系不大,但这里有一个实现:

mylist = ["hi_there", "bye_there","hello_there"]
print '\n'.join(s for s in mylist if s.startswith("hi"))
于 2012-07-19T21:21:20.090 回答
0

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

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

如果你的意思是更复杂的东西——例如,像“some_*_file”这样的模式匹配“some_good_file”和“some_bad_file”,那么看看正则表达式模块。

于 2012-07-19T21:20:49.567 回答
0
mylist = ["hi_there", "bye_there","hello_there"]
partial = "hi"
[fullname for fullname in mylist if fullname.startswith(partial)]
于 2012-07-19T21:21:11.520 回答
0

如果列表不是很大,您可以像这样进行逐项检查。

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

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

    return listOfMatchingFiles

有更多的“pythonic”方式可以做到这一点,但我更喜欢这种方式,因为它更具可读性。

于 2012-07-19T21:30:42.550 回答