将字典值(列表)写入输出文件 - Python

时间:2013-07-24 15:43:02

标签: python list dictionary

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

GtfFile.txt是一个10列文件(sep ='\ t'),我从...生成字典,使用基因名称作为关键字,术语(功能类别)作为值。一些基因有一个以上的术语归因于它们,并且作为每个术语的新线重复。每个术语也有不同数量的基因,因此我生成一个列表作为每个术语的关键。我的脚本的这一部分似乎正在工作,因为我会喜欢它!

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

以下是我的代码:

#!/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

2 个答案:

答案 0 :(得分:2)

如果我理解你的要求,那么你需要的是替换这个表达式:

 str(TermGeneDic[Term])

有类似的东西:

 " ".join(TermGeneDic[Term])

答案 1 :(得分: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]))