0

我希望能够从文件(电子表格或其他文件)中获取数据并创建一个字典,然后我可以在循环中迭代键,并在我的命令中为每个键插入相应的值。对不起,如果这没有多大意义,我将在下面更详细地解释。

我有几个样本正在通过生物信息学管道运行,并且我正在尝试使该过程自动化。其中一个步骤是将“读取组”信息添加到我的文件中,这是使用以下 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。是否有捷径可寻?我一直在阅读,似乎字典可能是要走的路,但我不清楚如何生成字典并将独立值调用到我的命令中。

4

1 回答 1

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'])
于 2013-03-07T18:45:45.063 回答