我正在尝试创建一个在我已经拥有的程序中运行的函数。我在dna序列中做出反向恭维。这是我现在拥有的。
for line in infile:
line = line.strip()
if line[0] == '>':
outfile.write(line+'\n')
else:
line = line.upper().replace(' ','')
if re.search('[^ACTG]', line) is None:
line = re.sub('A', 'F', line)
line = re.sub('T', 'A', line)
line = re.sub('F', 'T', line)
line = re.sub('G', 'Y', line)
line = re.sub('C', 'G', line)
line = re.sub('Y', 'C', line)
line = line[::-1]
outfile.write(line+'\n')
else:
outfile.write('ERROR'+'\n')
如何使用
等格式将功能添加到此程序中def codon(infile):
for line in infile:
return something
这可能很简单我是新手。感谢。
答案 0 :(得分:1)
代码没有看到返回任何内容,它只写入outfile,所以你可以这样做:
def codon(infile):
for line in infile:
line = line.strip()
if line[0] == '>':
outfile.write(line+'\n')
else:
line = line.upper().replace(' ','')
if re.search('[^ACTG]', line) is None:
line = re.sub('A', 'F', line)
line = re.sub('T', 'A', line)
line = re.sub('F', 'T', line)
line = re.sub('G', 'Y', line)
line = re.sub('C', 'G', line)
line = re.sub('Y', 'C', line)
line = line[::-1]
outfile.write(line+'\n')
else:
outfile.write('ERROR'+'\n')
return
甚至删除return语句。
希望这会有所帮助。
答案 1 :(得分:1)
不确定您是否正在考虑使用此功能返回。您可以返回一个列表,表示序列的完全反向补充(除了编写“outfile”),但如果您不想这样做,那么也许您不需要返回任何内容。
无论哪种方式,它看起来都像这样:
def codon(infile, outfile):
for line in infile:
# the rest of your code goes here.
return something # Remember to indent your return statement.
答案 2 :(得分:1)
而不是写入文件,将其保存在数组中,然后按照您的方式编写
假设文件不是非常大
def codon(infile):
outlines = []
... # your stuff
outlines.append(line+'\n')
else:
outlines.append('ERROR'+'\n')
... # more stuff
return outlines
答案 3 :(得分:1)
要将当前代码转换为返回结果的函数(除了写出文件外),您还可以使用以下代码:
def codon(infile):
all_lines = []
for line in infile:
line = line.strip()
if line[0] == '>':
pass
else:
line = line.upper().replace(' ','')
if re.search('[^ACTG]', line) is None:
line = re.sub('A', 'F', line)
line = re.sub('T', 'A', line)
line = re.sub('F', 'T', line)
line = re.sub('G', 'Y', line)
line = re.sub('C', 'G', line)
line = re.sub('Y', 'C', line)
line = line[::-1]
else:
line = 'ERROR'
all_lines.append(line)
outfile.write(line + '\n')
return all_lines
它会在处理和写出后为您提供包含所有行的列表。
我还重构了只在你的逻辑结束时写出来。由于您可能不希望在结果中使用'\n'
,因此我只会在使用outfile
输出时将其添加到最后。将该行附加到all_lines
列表时,您可能不需要'\n'
。
pass
行告诉python你不想在这种情况下做任何有趣的事情。你可以否定你的测试,只处理else
条款中的内容:
def codon(infile):
for line in infile:
line = line.strip()
if line[0] != '>':
line = line.upper().replace(' ', '')
...