gpt4 book ai didi

python - 如何在 Python 中通过 HTTP 与 UniProt 通信?

转载 作者:太空狗 更新时间:2023-10-30 00:33:58 25 4
gpt4 key购买 nike

我正在尝试从 UniProt 中获取一些结果,这是一个蛋白质数据库(细节并不重要)。我正在尝试使用一些脚本将一种 ID 转换为另一种 ID。我可以在浏览器上手动执行此操作,但无法在 Python 中执行。

http://www.uniprot.org/faq/28有一些示例脚本。我尝试了 Perl,它似乎可以工作,所以问题出在我的 Python 尝试上。 (工作)脚本是:

## tool_example.pl ##
use strict;
use warnings;
use LWP::UserAgent;

my $base = 'http://www.uniprot.org';
my $tool = 'mapping';
my $params = {
from => 'ACC', to => 'P_REFSEQ_AC', format => 'tab',
query => 'P13368 P20806 Q9UM73 P97793 Q17192'
};

my $agent = LWP::UserAgent->new;
push @{$agent->requests_redirectable}, 'POST';
print STDERR "Submitting...\n";
my $response = $agent->post("$base/$tool/", $params);

while (my $wait = $response->header('Retry-After')) {
print STDERR "Waiting ($wait)...\n";
sleep $wait;
print STDERR "Checking...\n";
$response = $agent->get($response->base);
}

$response->is_success ?
print $response->content :
die 'Failed, got ' . $response->status_line .
' for ' . $response->request->uri . "\n";

我的问题是:

1) 你会如何在 Python 中做到这一点?

2) 我能否大规模“扩展”(即在查询字段中使用大量条目)?

最佳答案

问题 #1:

这可以使用 python urllib 来完成:

import urllib, urllib2
import time
import sys

query = ' '.join(sys.argv)

# encode params as a list of 2-tuples
params = ( ('from','ACC'), ('to', 'P_REFSEQ_AC'), ('format','tab'), ('query', query))
# url encode them
data = urllib.urlencode(params)
url = 'http://www.uniprot.org/mapping/'

# fetch the data
try:
foo = urllib2.urlopen(url, data)
except urllib2.HttpError, e:
if e.code == 503:
# blah blah get the value of the header...
wait_time = int(e.hdrs.get('Retry-after', 0))
print 'Sleeping %i seconds...' % (wait_time,)
time.sleep(wait_time)
foo = urllib2.urlopen(url, data)


# foo is a file-like object, do with it what you will.
foo.read()

关于python - 如何在 Python 中通过 HTTP 与 UniProt 通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/715538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com