我有一个脚本,它根据ID列表查看不同的webtext URL。 我想在每个文本页面(\ sC :)之后的字符串中提取特定信息。 到目前为止,我能够将这些字符串输出存储在列表中,但是跟踪搜索到的原始ID与结果输出之间的对应关系并不是最好的。 我想创建一个字典而不是列表,其中ID作为键被搜索,相应的输出作为值。
到目前为止,这是我的脚本:
import urllib2
import sys
import re
IDlist = ['C9JVZ1', 'C9JLN0', 'C9J872']
URLlist = ["http://www.uniprot.org/uniprot/"+x+".txt" for x in IDlist]
function_list = []
for item in URLlist:
textfile = urllib2.urlopen(item)
myfile = textfile.readlines();
for line in myfile:
print "line:", line;
found = re.search('\s[C]:(.+?);', line);
if found:
function = found.group(1);
function_list.append(function)
我得到的输出是:
['cytosol', 'nucleus', 'transcription factor complex']
http://www.uniprot.org/uniprot/C9JVZ1.txt
中找不到任何内容 在http://www.uniprot.org/uniprot/C9JLN0.txt 中找到 Cytosol
在http://www.uniprot.org/uniprot/C9J872.txt
和nucleus
,transcription factor complex
我正在寻找的输出类似于:
{'C9JVZ1':[], 'C9JLN0':['cytosol'], 'C9J872':['nucleus', 'transcription factor complex']}
我试过了:
if found:
function = found.group(1);
function_dic = {item:[function]}
但我得到了这个输出:
>>> function_dic
{'http://www.uniprot.org/uniprot/C9J872.txt': ['transcription factor complex']}
答案 0 :(得分:1)
function_dic = {item:[function]}
这会在每个循环中用最后一个条目覆盖字典,以修复你要执行的操作:
function_dic[item] = [function]
但这只是每次都会覆盖这个值,所以你只有一个函数,所以为了解决这个问题,你会这样做:
function_dic[item].append(function)
但是你需要在内部for循环之外初始化它:
function_dic[item] = []
您提到您希望ID
不是URL
,因此您可以更改外部for循环以包含ID并使用它来构建字典,因此将它们放在一起:
function_list = {}
for id, item in zip(IDlist, URLlist):
function_list[id] = []
...
for line in myfile:
...
if found:
function = found.group(1)
function_list[id].append(function)