0

我正在尝试将字典中的值(列表)打印到另一个文件的第三列,该文件包含第一列中的字典键。我希望将值列表打印在输出文件的第三列中,并用空格分隔每个值。我知道我的问题在于 Python 不能编写不是字符串的东西,并且列表用“”分隔,但我是编程新手,不知道如何实现这一点 - 任何帮助都是非常感谢,谢谢!

GtfFile.txt 是一个 10 列文件 (sep = '\t'),我使用 Gene 名称作为键和 Term(功能类别)作为值来生成字典。几个基因具有多个归因于它们的术语,并且作为每个术语的新行重复。每个术语也有不同数量的基因,因此我生成一个列表作为每个术语的键。我的脚本的这一部分似乎可以按我的意愿工作!

FuncEnr_terms.txt 是一个 2 列文件 (sep ='\t'),它由第一列中的术语和第二列中的术语描述组成。我想要的输出文件是用第三列复制这个文件,第三列包含与用空格分隔的术语相关联的基因。将其写入输出文件是我的问题所在。

下面是我的代码:

#!/usr/bin/env python

import sys
from collections import defaultdict

if len(sys.argv) != 4 :
        print("Usage:  GeneSetFileGen.py  <GtfFile.txt> <FuncEnr_terms.txt> <OutputFile.txt>")
        sys.exit(0)

OutFileName = sys.argv[3]  
OutFile = open(OutFileName, 'w') 

TermGeneDic = defaultdict(list)

with open(sys.argv[1], 'r') as f :
    for line in f :
        line = line.strip()
        line = line.split('\t')
        Term = line[8]
        Gene = line[0]
        TermGeneDic[Term].append(Gene) 

#write output file
with open(sys.argv[2], 'r') as f :
    for line in f :
        line = line.strip()
        Term, Des = line.split('\t')
        OutFile.write(Term + '\t' + Des + '\t' + str(TermGeneDic[Term]) + '\n')

OutFile.close
4

2 回答 2

2

如果我正确理解您的要求,那么您需要替换此表达式:

 str(TermGeneDic[Term])

有类似的东西:

 " ".join(TermGeneDic[Term])
于 2013-07-24T16:01:34.263 回答
1

关于您的代码的几点建议:如果您不非常严格地遵循pep 8约定,您的代码将无法被其他任何人理解。这意味着,除了类名之外,没有 CamelCase。

其次,重用变量通常是不好的,这表明您应该将这些方法调用链接起来。当您有一个变量(例如line您实际更改的类型)时,情况尤其糟糕。

第三,方括号(圆括号)对于调用方法或函数是必需的。

第四,您将列表的元素连接成一个字符串'\t'.join(termgenes[term])

最后,使用模板来生成长字符串——它最终更容易使用。

您的代码应如下所示:

import sys
from collections import defaultdict

if len(sys.argv) != 4 :
        print("Usage:  GeneSetFileGen.py  <GtfFile.txt> <FuncEnr_terms.txt> <OutputFile.txt>")
        sys.exit(0)

progname,gtffilename,funcencrfilename,outfilename = sys.argv

termgenes = defaultdict(list)

with open(gtffilename, 'r') as gtf :
    for line in gtf:
        linefields = line.strip().split('\t')
        term, gene = linefields[8],linefields[0]
        termgenes[term].append(gene) 

#write output file
with open(funcencrfilename, 'r') as funcencrfile, open(outfilename, 'w') as outfile:
    for line in funcencrfile:
        term, des = line.strip().split('\t')
        outfile.write('%s\t%s%s\n' % term,des,'\t'.join(termgenes[term]))
于 2013-07-24T19:24:31.307 回答