使用函数进行字符串操作(替换和反向)

时间:2014-07-27 19:23:32

标签: python function str-replace

所有!

新手在这里!我试图创建一个允许我替换四个字符(ACTG)的函数。为了更简洁,我想取代' A'用' T'和' C'与' G',反之亦然。

到目前为止我的代码是这样的,但是我得到了一个错误(翻译期望至少有1个参数,得到0)。

#!/usr/bin/python
from sys import argv
from os.path import exists

def translate():
    str.replace("A", "T");
    str.replace("C", "G");
    str.replace("G", "C");
    str.replace("T", "A");

script, from_file, to_file = argv

print "Copying from %s to %s" % (from_file, to_file)

in_file = open(from_file)
indata = in_file.read()

newdata = indata.translate()

out_file = open(to_file, 'w')
out_file.write(newdata[::-1])

out_file.close()
in_file.close()

我尝试给翻译函数一个参数(def translate(str))并用str(newdata = indata.translate(str))调用它,但那些也没有用。

感谢任何帮助和指导。

3 个答案:

答案 0 :(得分:5)

使用翻译表:

import string
table = string.maketrans('ACGT', 'TGCA')

您可以像这样应用转换:

with open(from_file) as f:
    contents = f.read()

contents = contents.translate(table)  # Swap A<->T and C<->G
contents = contents[::-1]  # Reverse the string

with open(to_file, 'w') as f:
    f.write(contents)

答案 1 :(得分:2)

您创建了一个函数,而不是方法。它确实需要一个参数,但你需要将你的字符串作为参数传递给函数:

def translate(s):
    s = s.replace("A", "T")
    s = s.replace("C", "G")
    s = s.replace("G", "C")
    s = s.replace("T", "A")
    return s

然后,您需要致电translate(indata),而不是indata.translate()

请注意我做的其他一些更改:

  • 我将参数命名为s而不是str,因为str已经是内置类型的名称。
  • 我将replace的结果分配给变量。 replace返回 new 字符串,替换完成。它不会修改原始字符串。
  • 我退回了价值。如果你不这样做,你的功能将无法完成任何事情。

但是,您的功能仍然无效,因为替换相互补充。用T替换A后,用A替换T,因此将更改为Ts,然后再返回到As。您应该尝试修复此功能,但这个答案可以帮助您解决一些问题。

答案 2 :(得分:1)

实际上translate()模块中内置了一个string函数,它基本上可以满足您的需求。

http://www.tutorialspoint.com/python/string_translate.htm

尝试这样的事情:

import string

intable = "ACGT"
outtable = "TGCA"
translator = maketrans(intable, outtable)

str = str.translate(translator)

这将正确地进行角色交换。