我有一个这样的文件:
OG_100000: V_bacterium_v|198260291 O_bacterium_v|391222558 O_terrae_v|182414991
我做了这个功能:
def readGroupFile(groupFileName):
dict_gene_taxonomy = {}
fh = open(groupFileName,"r")
for line in fh:
liste = line.split(": ")
groupName = liste[0]
genesAsString = liste[1]
dict_taxon = {}
liste_gene = genesAsString.split()
for item in liste_gene:
taxonomy_gene = item.split("|")
taxonomy = taxonomy_gene[0]
geneId = taxonomy_gene[1]
if taxonomy in dict_taxon:
listeCorrespondantATaxonomy = dict_taxon[taxonomy]
listeCorrespondantATaxonomy.append(geneId)
else:
dict_taxon[taxonomy] = []
dict_taxon[taxonomy].append(geneId)
dict_gene_taxonomy[groupName] = dict_taxon
fh.close()
return dict_gene_taxonomy
我做这个函数是为了使字典和每个字典中的split元素只能到达管道(“|”)后面的元素,称为geneId
然后我做了一个函数,用这些geneID在internet数据库上创建Post请求。我不会链接整个函数,因为当我在函数的行中手动添加geneId时,它工作正常:
data = urllib.parse.urlencode(getPost("391222558"))
考虑到“391222558”是组文件中的一个geneId,但我需要用readGroupFile函数中的每个“geneId”替换这些数字。 我不会写:
data = urllib.parse.urlencode(getPost(geneId))
因为我调用的是readGroupFile中的一个元素,它不是在这个函数之外定义的。 那么,我怎样才能访问readGroupFile函数中的所有“geneId”来在getPost(…)中添加这个参数,这样它就可以对我的组文件中的每个geneId工作
您的问题是,您只创建局部变量,而这些变量在函数结束时会被删除。
所以你有两个选择:
第一个是将geneid定义为一个全局变量,您所要做的只是:
你必须定义他一次,而不是在一个函数中,然后每当你使用它的时候,只要写上global和他的名字,这将使他成为全局变量。 您的secend选项是对dict执行相同的操作,dict也包含此变量。 我希望我帮了你
相关问题 更多 >
编程相关推荐