Я хочу написать сценарий, который принимает введенное пользователем имя фермента рестрикции (следовательно, строку) и анализирует заданную последовательность ДНК (также строку) на наличие экземпляров последовательности фермента рестрикции. Ввод будет иметь доступ к библиотеке ферментов рестрикции, содержащейся в модуле Bio.Restriction. Очень простой пример:
from Bio.Restriction import *
sequence=('ACGGCTATCGATAACTG...')
enzyme=input('Enter the name of your restriction enzyme: ')
enzymeSite=Bio.Restriction.enzyme.site
enzymeSite in sequence
#True or False
Проблема, конечно, в том, что переменная enzyme является строковым объектом, а не объектом RestrictionType, необходимым для доступа к классу.
type(enzyme)
<class 'str'>
type(Bio.Restriction.EcoRI)
RestrictionType
Я попытался использовать пакет importlib. Однако ферменты представляют собой классы, а не модули, поэтому importlib не может помочь.
i=importlib.import_module('Bio.Restriction',fromlist=[''])
dir(i)
#list of Bio.Restriction contents
i=importlib.import_module('Bio.Restriction.EcoRI',fromlist=[''])
Traceback (most recent call last):
File "<pyshell#391>", line 1, in <module>
i=__import__('Bio.Restriction.EcoRI',fromlist=[''])
ImportError: No module named 'Bio.Restriction.EcoRI'
Я также довольно новичок в Python, поэтому я не получил слишком многого от чтения исходных файлов Restriction.
Существуют очевидные ограничения на принудительный доступ к ферменту рестрикции в командной строке. Одним из решений этой проблемы является наличие двух сценариев Python, один из которых запрашивает у пользователя фермент, а затем последовательно заменяет код и импортирует выходные данные из другого сценария. Другое решение состоит в том, чтобы просто создать словарь всех возможных ферментов рестрикции и их сайтов. Оба этих решения отвратительны. Идеальным решением для меня было бы преобразовать введенную пользователем строку в правильный объект RestrictionType, который затем можно было бы использовать для доступа к сайтам. Спасибо за чтение, и я был бы признателен за любую помощь с этой проблемой.