Цикл для перебора URL переменной переменной (Python) - PullRequest
2 голосов
/ 07 марта 2019

Python новенький здесь.

Я разрабатываю простую программу поиска последовательностей для последовательностей ДНК. Основная идея состоит в том, чтобы получить из базы данных NCBI различные последовательности из определенного генома и начальных и конечных точек. Пока что я могу сделать простой поиск одного генома и одной конкретной позиции: `

  import urllib

  genome="NC_009089.1"
  start="359055"
  end= "359070"

  link = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nuccore&id=%s&rettype=fasta&seq_start=%s&seq_stop=%s" % (genome, start, end)


  f = urllib.urlopen(link)
  myfile = f.read()
  print(myfile).splitlines()[1]
                              `

И это вывод, который я получаю (последовательность в этой позиции):

AGTAAAACGGTTTCCT

Теперь я хотел бы найти несколько последовательностей из разных геномов и с разными начальными и конечными точками одновременно, возвращая все найденные последовательности. Я попытался импортировать данные в виде CSV с геномами в первом столбце, начинается во втором и заканчивается в трети, а затем выполнить цикл for с открытым файлом, но так как я не знаком с изменением переменных в URL, я не знаю, как поступить.

Извините, если это наивный вопрос. Любая помощь будет оценена.

1 Ответ

1 голос
/ 07 марта 2019

Если у вас уже есть все параметры в файле, вы можете перебирать эти данные и делать запросы следующим образом (я использую списки, потому что вы не показываете свой код, как вы читаете данные из файла):

import urllib
url = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi'

for genome, start, end in zip(genome_list, start_list, end_list):
    data = {
        'db': 'nuccore',
        'rettype': 'fasta',
        'genome': genome,
        'start': start,
        'end': end,
    }
    f = urllib.urlopen(url, data)

При передаче dict с параметрами запроса, urlopen() заботится о правильном кодировании всех параметров (с = и &).


Если urllib немного сложнее, вы можете попробовать библиотеку python requests, с которой гораздо лучше работать по моему опыту (но это сторонняя библиотека, а не встроенная).

...