5

タンパク質データベースである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)それを大規模に「スケーリング」することはできますか(つまり、クエリフィールドで多くのエントリを使用する)?

4

6 に答える 6

8

質問1:

これは、python の urllibs を使用して実行できます。

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()
于 2009-04-03T20:28:44.210 に答える
1

これをチェックしてくださいbioservices。Python を介して多くのデータベースとやり取りします。 https://pythonhosted.org/bioservices/_modules/bioservices/uniprot.html

conda install bioservices --yes
于 2016-08-05T18:22:05.330 に答える
1

EBI の Protein Identifier Cross Reference サービスを使用して、一連の ID を別の ID に変換した方がよいでしょう。非常に優れた REST インターフェイスを備えています。

http://www.ebi.ac.uk/Tools/picr/

また、UniProt には非常に優れた Web サービスが用意されていることにも言及しておく必要があります。ただし、何らかの理由で単純な http リクエストを使用することに縛られている場合は、おそらく役に立たないでしょう。

于 2009-09-08T11:00:26.410 に答える