我希望能够从文件(电子表格或其他)中获取数据,然后创建一个字典,然后我可以在循环中迭代键,并在每个键的命令中插入相应的值。对不起,如果这没有多大意义,我将在下面详细解释。
我有几个样本,我正在通过生物信息学管道运行,我正在尝试自动化该过程。其中一个步骤是将“读取组”信息添加到我的文件中,这些信息通过以下shell命令完成:
picard-tools AddOrReplaceReadGroups I = input.bam O = output.bam RGID = IDXX RGLB = LBXX RGPL = PLXX RGPU = PUXX RGSM = SMXX VALIDATION_STRINGENCY = SILENT SORT_ORDER =坐标CREATE_INDEX = true
对于每个样本ID,有一个不同的RGID,RGLB,GRPL,RGPU和RGSM(以及不同的输入文件,但我已经知道如何调用该信息。)我想要做的是有一个循环执行此命令用于每个样本ID,并将相应的RGLB,GRPL,RGPU和RGSM插入到命令中。是否有捷径可寻?我一直在阅读,似乎字典可能是要走的路,但我不清楚如何生成字典并将独立值调用到我的命令中。
答案 0 :(得分:0)
这应该很简单,但是如何操作取决于输入文件的格式。你会想要一些基本上像这样的东西:
import subprocess # This is how we're going to call the commands.
samples = {} # Empty dict
with open('inputfile','r') as f:
for line in f:
# Extract sampleID, other things depending on file format...
samples[sampleID] = [rgid, rglb, grpl, rgpu, rgsm] # Populate dict
for sampleID in samples:
rgid, rglb, grpl, rgpu, rgsm = samples[sampleID]
# Now you can run your commands using the subprocess module.
# Remember to add a change based on sampleID if e.g. the IO files differ.
subprocess.call(['picard-tools', 'AddOrReplaceReadGroups', 'I=input.bam',
'O=output.bam', 'RGID=%s' % rgid, 'RGLB=%s' % rglb, 'RGPL=%s' %rgpl,
'RGPU=%s' % rgpu, 'RGSM=%s' % rgsm, 'VALIDATION_STRINGENCY=SILENT',
'SORT_ORDER=coordinate', 'CREATE_INDEX=true'])