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

问题描述 投票:0回答:2

我希望编写一个脚本,接受用户输入的限制酶名称(因此是一个字符串)并解析给定的 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 是一个字符串对象,而不是访问该类所需的 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 也相当陌生,所以我并没有从阅读限制源文件中得到太多东西。

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

python type-conversion biopython
2个回答
4
投票

我以前从未使用过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

这符合您正在寻找的内容吗?


0
投票

这篇文章已经有 9 年历史了,但我也遇到了同样的问题,并找到了一个解决方案,可以避免使用 RestrictionBatch。对我来说,这很重要,因为我一次只需要一种限制性内切酶,而使用 RestrictionBatch 需要几行代码,而我只想使用字符串获取 Restriction 对象。

我发现只需一行代码即可完成以下操作:

enzyme = getattr(Restriction, <enzyme_name>)

或者,修改上面的例子:

from Bio import Restriction

sequence=('ACGGCGAATTCTATCGATAACTG...')

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

# get enzyme using getattr on Restriction
enzyme = getattr(Restriction, enzyme_name)
print (type(enzyme)) # RestrictionType

print (enzyme.site in sequence) # True
© www.soinside.com 2019 - 2024. All rights reserved.