str.maketrans 在交互式 python 中可用,但在 python 脚本中不可用?
str.maketrans available in interactive python, but not python script?
我正在编写的代码应该在 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))
当我 运行 它在解释器中工作时!它returns正确答案:
['ATGACGGCTTGTTTCTTTTCTGTGGCTGCG']
当我运行将其作为脚本(版本 3.3)时,我得到 AttributeError!
AttributeError: type object 'str' has no attribute 'maketrans'
但是当我在解释器(3.3 版)中 dir(str)
时,我看到了 maketrans!什么给!?
阅读 bytes.maketrans()
的更改后,我尝试了此操作但无济于事。我该怎么做才能在 python3.3 中获得与 maketrans()
相同的功能?
看来您的 shebang 行 returns 是 python 解释器的 2.7.x 版本。如果您不担心可移植性(允许其他用户使用您的文件),您可以使用 #!/usr/local/bin/python3.3
指定直接路径(更改路径以适合解释器的位置)以使其工作。对于 #!/usr/bin/env python
与 #!/usr/local/bin/python
之间差异的 post,您可以 look here。基本上,前者将使用首先出现在环境 $PATH
上的解释器,在您的情况下是 python2.7
.
编辑
OP 是 运行 使用 shell 和以下命令的脚本:python
myscript.py
。这使用默认解释器(2.7,在他们的情况下),它不识别 maketrans 方法。 运行 带有 python3.3 myscript.py
的脚本解决了问题。
我正在编写的代码应该在 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))
当我 运行 它在解释器中工作时!它returns正确答案:
['ATGACGGCTTGTTTCTTTTCTGTGGCTGCG']
当我运行将其作为脚本(版本 3.3)时,我得到 AttributeError!
AttributeError: type object 'str' has no attribute 'maketrans'
但是当我在解释器(3.3 版)中 dir(str)
时,我看到了 maketrans!什么给!?
阅读 bytes.maketrans()
的更改后,我尝试了此操作但无济于事。我该怎么做才能在 python3.3 中获得与 maketrans()
相同的功能?
看来您的 shebang 行 returns 是 python 解释器的 2.7.x 版本。如果您不担心可移植性(允许其他用户使用您的文件),您可以使用 #!/usr/local/bin/python3.3
指定直接路径(更改路径以适合解释器的位置)以使其工作。对于 #!/usr/bin/env python
与 #!/usr/local/bin/python
之间差异的 post,您可以 look here。基本上,前者将使用首先出现在环境 $PATH
上的解释器,在您的情况下是 python2.7
.
编辑
OP 是 运行 使用 shell 和以下命令的脚本:python
myscript.py
。这使用默认解释器(2.7,在他们的情况下),它不识别 maketrans 方法。 运行 带有 python3.3 myscript.py
的脚本解决了问题。