在python中,如何将print更改为在for循环中返回?
下面的代码正在执行我想要的大部分操作 我所需要的就是将在python中,如何将print更改为在for循环中返回?,python,for-loop,printing,return,bioinformatics,Python,For Loop,Printing,Return,Bioinformatics,下面的代码正在执行我想要的大部分操作 我所需要的就是将打印实际上变成一个返回,这样我就可以将数据转储到我正在编写的另一个txt文件中(f2) (另外,打印字母所获得的间距不是我想要的,但我想稍后再处理。) 每次我将print替换为return时,它只是在初始文本文件(f1)的第一行之后停止读取 改为使用yield,并将函数视为生成器。这样,调用者就可以随心所欲地使用DNA2Prot函数生成的所有蛋白质,并从文件中读取,直到读取整个文件 def DNA2Prot(f1, f2='translate
打印
实际上变成一个返回
,这样我就可以将数据转储到我正在编写的另一个txt文件中(f2
)
(另外,打印字母所获得的间距
不是我想要的,但我想稍后再处理。)
每次我将print
替换为return
时,它只是在初始文本文件(f1
)的第一行之后停止读取
改为使用
yield
,并将函数视为生成器。这样,调用者就可以随心所欲地使用DNA2Prot
函数生成的所有蛋白质,并从文件中读取,直到读取整个文件
def DNA2Prot(f1, f2='translated_fasta.txt'):
# prefer using `with` to `open` and `close`
with open(f1, 'r') as fin:
for letters in fin:
if letters[0] != '>':
seqs = letters
codons = [ ]
protein = ''
for i in range(0, len(seqs), 3):
# no need for a try catch, because we can use `get`
# get will return None by default if the
# specified `codon` does not appear in
# `codon_table`
codon = seqs[i:i + 3]
codons = codon_table.get(codon)
if codons:
protein += codons
yield protein
else:
yield letters
现在,您必须将DNA2Prot
函数视为一个迭代器
:
with open('/path/to/outfile', 'w') as f:
for protein in DNA2Prot(f1):
# do something with protein
print protein
改为使用
yield
,并将函数视为生成器。这样,调用者就可以随心所欲地使用DNA2Prot
函数生成的所有蛋白质,并从文件中读取,直到读取整个文件
def DNA2Prot(f1, f2='translated_fasta.txt'):
# prefer using `with` to `open` and `close`
with open(f1, 'r') as fin:
for letters in fin:
if letters[0] != '>':
seqs = letters
codons = [ ]
protein = ''
for i in range(0, len(seqs), 3):
# no need for a try catch, because we can use `get`
# get will return None by default if the
# specified `codon` does not appear in
# `codon_table`
codon = seqs[i:i + 3]
codons = codon_table.get(codon)
if codons:
protein += codons
yield protein
else:
yield letters
现在,您必须将DNA2Prot
函数视为一个迭代器
:
with open('/path/to/outfile', 'w') as f:
for protein in DNA2Prot(f1):
# do something with protein
print protein
第一件事。当您使用return语句时,您是在告诉您的代码从return语句所在的点中断(即离开)。这意味着您的代码将从fin开始读取,移动到第二个,并且一旦完成(读取该行的所有字母),它将到达您的return语句并从DNA2prot函数中断 现在,当涉及到文件时,您可以做两件事。首先是使用打印功能将输出重定向到文件(不推荐)或正确打开文件并写入其中 关于第一个解决方案(假设您使用的是python 2.7),您只需执行以下操作:
from __future__ import print_function
当您想使用打印语句时,只需写下:
print(protein, file = fin).
但是,如果我是你,我会选择一种更优雅、更干净的解决方案,不依赖不必要的进口:
def DNA2Prot(f1, f2="translated_fasta.txt"):
with open (f1, 'r+') as fin, open(f2, 'w+') as fin2: #Using the "with-open" statement you don't need to close the file object
for letters in fin:
if letters[0]!=">":
seqs=letters
codons=[ ]
protein=''
for i in range(0,len(seqs),3):
try:
codon=seqs[i:i+3]
codons=codon_table[codon]
protein=protein+codons
except KeyError:
protein+=""
f2.write(protein) # Write your data to the second file
else:
f2.write(letters)
第一件事。当您使用return语句时,您是在告诉您的代码从return语句所在的点中断(即离开)。这意味着您的代码将从fin开始读取,移动到第二个,并且一旦完成(读取该行的所有字母),它将到达您的return语句并从DNA2prot函数中断 现在,当涉及到文件时,您可以做两件事。首先是使用打印功能将输出重定向到文件(不推荐)或正确打开文件并写入其中 关于第一个解决方案(假设您使用的是python 2.7),您只需执行以下操作:
from __future__ import print_function
当您想使用打印语句时,只需写下:
print(protein, file = fin).
但是,如果我是你,我会选择一种更优雅、更干净的解决方案,不依赖不必要的进口:
def DNA2Prot(f1, f2="translated_fasta.txt"):
with open (f1, 'r+') as fin, open(f2, 'w+') as fin2: #Using the "with-open" statement you don't need to close the file object
for letters in fin:
if letters[0]!=">":
seqs=letters
codons=[ ]
protein=''
for i in range(0,len(seqs),3):
try:
codon=seqs[i:i+3]
codons=codon_table[codon]
protein=protein+codons
except KeyError:
protein+=""
f2.write(protein) # Write your data to the second file
else:
f2.write(letters)
请修复缩进,在运算符、赋值周围添加空格。。。另外,粘贴一些示例数据,以便我们了解文件包含的内容考虑到有用的答案并接受作为答案,请查看您的代码在命中无效密码(实际上被跳过)后继续翻译。最好是崩溃或有一个完整的密码子表。请修复缩进,在运算符、赋值周围添加空格。。。另外,粘贴一些示例数据,以便我们了解文件包含的内容考虑到有用的答案并接受作为答案,请查看您的代码在命中无效密码(实际上被跳过)后继续翻译。最好是崩溃或者有一个完整的密码子表。