我对正则表达式非常不满意。
我正在尝试根据文件名找到文件夹中的文件。大多数文件名的格式为GSE1234_series_matrix.txt
,因此我一直在使用os.path.join("files", GSE_num + "_series_matrix.txt")
。但是,一些文件的名称类似于GSE1234-GPL22_series_matrix.txt
。我不知道如何处理所有以GSE编号开头并以_series_matrix.txt结尾的文件,可能在一个语句中。我真的很感激任何帮助。
编辑 - 我将这些系列矩阵文本文件放在一个文件夹中,为此我提到了使用路径连接的路径。我还输入了一个文本文件,其中包含所有GSE编号。这样它只为选定的GSE编号运行脚本。因此,文件夹中的所有内容都不在GSE num列表中,并且列表中只有GSE编号,而不是GPL。例如,文件GSE1234-GPL22_series_matrix.txt将是列表中的GSE1234。
答案 0 :(得分:4)
完全使用正则表达式。
good_filenames = [name for name in filenames if name.startswith("GSE") and name.endswith("_series_matrix.txt")]
答案 1 :(得分:1)
^GSE\d+.*series_matrix.txt$
这将匹配以GSE和数字开头的任何内容,并以series_matrix.txt结尾
答案 2 :(得分:0)
你可以使用glob。根据您在模式中包含的路径的数量,您根本不必担心使用os.path.join
。
import glob
good_filenames = glob.glob('/your/path/here/GSE*_series_matrix.txt')
返回:
['/your/path/here/GSE1234_series_matrix.txt',
'/your/path/here/GSE1234-GPL22_series_matrix.txt']