使用 BioPython 检查限制位点的 DNA 序列的用户输入

User input to check a DNA sequence for restriction sites with BioPython

我想编写一个脚本来接受用户输入的限制酶名称(因此是一个字符串)并解析给定的 DNA 序列(也是一个字符串)以获取限制酶序列的实例。输入将访问包含在 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是一个字符串对象,而不是访问class所需的RestrictionType对象。

type(enzyme)
<class 'str'>

type(Bio.Restriction.EcoRI)
RestrictionType

我尝试使用 importlib 包。然而,这些酶似乎是 classes 而不是模块,因此 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 的新手,所以我没有从阅读限制源文件中学到太多东西。

在命令行中强制访问限制酶有明显的局限性。此问题的一种解决方案是使用两个 python 脚本,其中一个提示用户输入酶,然后替换代码并从另一个脚本导入输出。另一种解决方案是简单地创建所有可能的限制酶及其位点的字典。这两种解决方案都很可怕。对我来说,理想的解决方案是将用户输入的字符串转换为正确的 RestrictionType 对象,然后可以使用该对象访问站点。感谢您的阅读,如果您对此问题有任何帮助,我将不胜感激。

我以前从未使用过Biopython,但我对生物信息学很感兴趣,所以我研究了一下。我不能保证这是执行此操作的最佳方法,因为它很奇怪,但它似乎有效。

我做了一个 RestrictionBatch 并将酶作为字符串添加到批次中,然后使用 batch.get() 检索 RestrictionType 对象,使用与查询完全相同的字符串.我知道酶名称对大小写非常敏感,我使用 EcoRI 进行测试。我用你的例子工作过:

from Bio.Restriction.Restriction import RestrictionBatch

sequence=('ACGGCGAATTCTATCGATAACTG...')

# Read enzyme name from input. 
enzyme_name = input("Enter enzyme name:\n") # E.g EcoRI
print (type(enzyme_name)) # <type 'str'>

# Get RestrictionType by name
batch = RestrictionBatch()
batch.add(enzyme_name)
enzyme = batch.get(enzyme_name)
print (type(enzyme)) # RestrictionType

print (enzyme.site in sequence) # True

这是否符合您要查找的内容?