我有一个目录,其中包含以下结构的文件
A2ML1_A8K2U0_MutationOutput.txt
A4GALT_Q9NPC4_MutationOutput.txt
A4GNT_Q9UNA3_MutationOutput.txt
...
前几个字母代表基因,后几个字母代表Uniprot编号(唯一的蛋白质标识符)和突变输出是不言自明的。你知道吗
在Python中,我要执行以下行:
f_outputfile.write(mutation_directory + SOMETHING +line[1+i]+"_MutationOutput.txt\n")
这里,line[1+i]
正确地标识Uniprot ID
我要做的是正确识别基因名。因此,我需要快速搜索该目录,在uniprot字段中找到具有line[i+1]
值的文件,然后取出基因名。你知道吗
我知道我可以列出目录中的所有文件,然后我可以对每个字符串执行str.split()
操作并找到它。但有没有办法让我更聪明?我应该用字典吗?我能快速搜索一下正则表达式吗?你知道吗
整个目录大约有8116个文件——所以没有那么多。你知道吗
谢谢你的帮助!你知道吗
你可以用glob
想想你在壳里是怎么做到的:
或者,如果您在Windows上:
在Python中,您可以使用^{} 模块执行完全相同的操作:
当然,你可以用一个函数来表示:
这是否“聪明”取决于你的使用模式。你知道吗
如果每次运行都要查找数千个文件,那么只读取一次目录并使用字典而不是重复搜索肯定会更有效率。但是如果你打算,例如,无论如何,读取一个完整的文件,那要比查找它花费数个数量级的时间,所以这可能无关紧要。你知道他们怎么说过早优化。你知道吗
但是如果你想,你可以很容易地用Uniprot数字来编一本字典:
然后:
对于简单的情况,不需要正则表达式。*
更重要的是,你要找什么?要么你要循环,在这种情况下你可以使用
glob
,要么你要建立一个人工的巨型字符串来搜索,在这种情况下你最好只建立字典。你知道吗*事实上,至少在某些平台/实现上,
glob
是通过从简单的通配符模式中生成正则表达式来实现的,但您不必担心这一点。相关问题 更多 >
编程相关推荐