我有一个看起来像这样的文件:
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
我做了这个函数,使每个字典中的字典和拆分元素只能到达管道后面的元素(" |"),称为geneId。
然后我做了一个函数,用这些geneID在互联网数据库上创建一个Post Request。我不会链接整个函数,因为当我在函数行中手动添加geneId时它可以正常工作:
data = urllib.parse.urlencode(getPost("391222558"))
考虑到" 391222558"是一个来自组文件的geneId,但我需要用每个" geneId"来替换这些数字。在我的readGroupFile函数中。 我不能写:
data = urllib.parse.urlencode(getPost(geneId))
因为我调用了readGroupFile中的一个元素,该元素未在此函数之外定义。 那么我怎样才能达到所有" geneId"在我的readGroupFile函数中,在getPost(...)中添加此参数,以便它可以用于我的组文件中的每个geneId吗?
答案 0 :(得分:0)
你的问题是你只创建局部变量,并在函数结束时删除它们。
所以你有几个选择:
第一个是将geneid定义为全局变量,你所要做的只是:
global geneid
def readGroupfile():
global geneid
你必须定义他一次不在函数中,然后每当你使用它时只写全局和他的名字,它将使他成为全局变量。 你的secend选项是对你的dict做同样的事情,它也包含这个变量。 我希望我帮助过你。