我正在编写的代码应该在DNA的正向和反向互补链上找到基因序列的所有开放阅读框(orfs)。为了制作DNA的反向链,我打算使用str.maketrans()
将互补碱基相互映射。
#!/usr/bin/env python3.3
import re
import sys
from argparse import ArgumentParser
pattern = re.compile(r'(?=(ATG(?:...)*?)(?=TAG|TGA|TAA))')
dna_seq = 'ATGACGGCTTGTTTCTTTTCTGTGGCTGCGTGA'
def find_orfs(dna_seq):
"""
finds all possible open reading frames (orfs)
:param dna_seq: str, dna sequence
:return: list, possible open reading frames
"""
r_comp = dna_seq[::-1].translate(str.maketrans("ATGC","TACG"))
return list(pattern.findall(dna) + pattern.findall(r_comp))
当我在翻译中运行它时,它有效!它返回正确答案:
['ATGACGGCTTGTTTCTTTTCTGTGGCTGCG']
当我将其作为脚本(版本3.3)运行时,我得到了AttributeError!
AttributeError: type object 'str' has no attribute 'maketrans'
但是当我在解释器(版本3.3)中dir(str)
时,我看到了maketrans!什么给了!?
在阅读有关bytes.maketrans()
的更改后,我尝试了这一点无济于事。如何在python3.3中获得maketrans()
的相同功能?
答案 0 :(得分:1)
似乎你的shebang行返回了一个2.7.x版本的python解释器。您可以使用// Load original image as grey scale
Mat image = imread("imagename.png", IMREAD_GRAYSCALE);
vector<vector<Point>> contours;
Mat hierarchy;
findContours(image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
指定直接路径(更改路径以适应解释器的位置),以便在您不担心可移植性(允许其他用户使用您的文件)时使其工作。有关#!/usr/local/bin/python3.3
与#!/usr/bin/env python
之间差异的帖子,您可以look here。基本上,前者将使用首先出现在环境#!/usr/local/bin/python
上的解释器,在您的情况下为$PATH
。
修改的
OP使用shell运行脚本,并使用以下命令:python2.7
。这使用默认解释器(在它们的情况下为2.7),它不识别maketrans方法。使用python
myscript.py
运行脚本解决了问题。