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 的脚本解决了问题。