到目前为止,我是Python的新手,对基础编程的了解最少。为了对数据集进行生物信息学分析,我试图提出一个脚本来自动执行大多数任务。分析包括运行多个连续马尔可夫联盟(MSMC)来推断拟南芥的有效种群历史,拟南芥是许多研究的模型生物。
所需的脚本将执行以下操作:
1)遍历以特定结尾结尾的输入文件,该地址以
处理for filename in os.listdir(input_directory):
if filename.endswith(".multihetsep.txt")
,目前为止可以使用。 2)然后,将用于分析的软件放在所述文件上,这对我来说很棘手;对于一种情况,subprocess.call看起来像这样:
call (["./msmc_1.1.0_linux64bit","-I0,1","-p1*2+15*1+1*2","- o",outdir+filename,filename])
与 将outdir分配给固定的字符串和文件名显然取决于迭代的文件。
为了进行分析,脚本应该能够将0-27中的值以2对为单位合并,并在-I参数的调用中使用它们,而我目前不知道该怎么做。同样,它应该在4,6和8对中进行相同的操作。相同的问题原则上也适用于其他参数,因为我将针对不同的分析运行更改值。另外,我也在努力寻找有关如何获取以严格方式命名的输出文件的信息。假设对于-I 0,1,我想将_1附加到输出文件名(此程序中的-o指定输出位置和前缀)。最后一个arg“文件名”提供输入文件。即使经过大量研究(Google,stackoverflow,Python书籍),我仍无法找到解决该问题的方法。
原则上,我可以使用subprocess.call函数执行此操作吗?还是必须以其他方式解决此问题?
我当前的方法是只运行一个包含所有所需场景的shell脚本,但是当然这很混乱,并且包含许多代码行。
我现在的整个代码如下:
#!/usr/bin/env python3.6
from subprocess import call
input_directory = "location of input files"
for filename in os.listdir(input_directory):
if filename.endswith(".multihetsep.txt"):
call (["./msmc_1.1.0_linux64bit","-I0,1","-p1*2+15*1+1*2","-o",outdir+filename,filename])
else:
print("Specify valid input files.")
我将不胜感激任何输入和帮助,我可能会对此有所帮助。
谢谢!