从电子表格到ipython / python&中的字典更多?

时间:2013-03-07 18:34:09

标签: python dictionary ipython

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

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

1 个答案:

答案 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'])