如何使用python反向补充多序列fasta文件?
我是python新手,我正在试图弄清楚如何读取具有多个序列的fasta文件,然后创建一个包含序列反向互补的新fasta文件。该文件的外观如下所示: >智人 ACGTCAGTACGTACGTCATGACGTACGTACGTACTACTGACTGACTGACGTACTGACTGACGTACGTACGTACGTACGGTACGTACGTACGTACGTACGTACTG >犬狼疮 CAGTCATGCATGCATGCAGTCAGTCAGTCAGTCAGTACTGCATGCATGCATGCAGCTGCAGTACTGACGTACTGACGCGTCATGCAGTCATGCAGTCATGCATGCATGCATGCGCATGCGCAGTCAGTG >潘努特罗格杜斯酒店 CATGCATCTGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGACTGCAGTCATGCCAGCATGCATGCATCAT 我正在尝试学习如何使用for和while循环,因此如果解决方案可以包含其中一个循环,那么它将是首选 到目前为止,我以一种非常不公平的方式做到了以下几点: file1=打开('/path/to/file',r') file1.close()如何使用python反向补充多序列fasta文件?,python,while-loop,fasta,dna-sequence,Python,While Loop,Fasta,Dna Sequence,我是python新手,我正在试图弄清楚如何读取具有多个序列的fasta文件,然后创建一个包含序列反向互补的新fasta文件。该文件的外观如下所示: >智人 ACGTCAGTACGTACGTCATGACGTACGTACGTACTACTGACTGACTGACGTACTGACTGACGTACGTACGTACGTACGGTACGTACGTACGTACGTACGTACTG >犬狼疮 CAGTCATGCATGCATGCAGTCAGTCAGTCAGTCAGTACTGCATGCATGCATGCAGCTGCAGT
这是可行的,但我知道有一种更好的方法来迭代这个结束部分。有更好的解决方案吗?这里是一个简单的字符串反转示例 Python代码 添加了打印命令以显示脚本中发生的情况
在Python中运行它,看看会发生什么。
< P>我知道你认为这是一个练习,但是如果你对使用现有的设施感兴趣,请看一下这个包。特别是如果你要做更多的顺序工作 这将允许您使用例如seq=seq('GATTACA')
实例化一个序列。然后,seq.reverse\u complete()
将为您提供反向补码
请注意,反向补码不仅仅是字符串反向,核苷酸碱基也需要用它们的补码字母替换。通常,要在文本文件中的行上迭代,您使用for循环,因为“open”返回一个可迭代的file对象
>>> f = open('workfile', 'w')
>>> print f
<open file 'workfile', mode 'w' at 80a0960>
输出(与您的示例一起):
假设我没弄错,下面的代码对你有用吗?你可以把你想要的交换添加到字典里
d = {'A':'T','C':'G','T':'A','G':'C'}
with open("seqs.fasta", 'r') as in_file:
for line in in_file:
if line != '\n': # skip empty lines
line = line.strip() # Remove new line character (I'm working on windows)
if line.startswith('>'):
head = line
else:
print head
print ''.join(d[nuc] for nuc in line[::-1])
输出:
>homo_sapiens
CAGTACGTACGTACGTACGTACGTACGTCAGTCAGTCAGTACGTCAGTCAGTCAGTCAGTACGTACGTCATGACGTACGT
ACTGACGT
>Canis_lupus
CATGACTGCATGCATGACGTCAGTACGTCAGTACTGCAGTCATGCATGCATGCATGCATGCAGTACTGACTGACGTCATG
ACTGCATGCATGCATGACTG
>Pan_troglodytus
ATGATGCATGCATGACTGACTGCATGACTGCAGTCATGATGCATGCATGCATGCATGCATGCATGATGCATGCATGCAGT
ATGCATG
您是否尝试过导致问题的任何方法?如果有,请包括在内。我觉得你可能跳过了“搜索和研究”的步骤。这个问题是一个非常开放的问题,涉及到许多不同类型的功能。例如,您必须读取该文件。然后你必须以某种方式处理它的内容。就目前的形式而言,它可能过于宽泛,无法在这个主题上加以考虑。从你的问题的一个方面开始,比如阅读文件,一旦你解决了问题,就转到下一个方面。我真的只是想知道是否有更好的方法来反复阅读else语句。我知道你并不需要我的表扬,但这使它成为一个更好的问题。谢谢你的澄清!我可以将biopython与导入的fasta文件一起使用吗?或者我必须使用类似于>seq=seq('GATTACA')的东西。您也可以使用
SeqIO
类读取FASTA文件。您应该查看手册:.+1表示您的“不要重新发明轮子”政策。如果你问我的话,学习这一课是编程方面的一个很好的练习
import string
if __name__ == "__main__":
file_name = "test"
translator = string.maketrans("TAGCPR", "PTRGAC")
with open(file_name, "r") as f:
while True:
title = f.readline().strip()
if not title: # end of file
break
rev_seq = f.readline().strip().translate(translator)[::-1]
f.readline() # blank line
print(title)
print(rev_seq)
>homo_sapiens
RPGTPRGTPRGTPRGTPRGTPRGTPRGTRPGTRPGTRPGTPRGTRPGTRPGTRPGTRPGTPRGTPRGTRPTGPRGTPRGTPRTGPRGT
>Canis_lupus
RPTGPRTGRPTGRPTGPRGTRPGTPRGTRPGTPRTGRPGTRPTGRPTGRPTGRPTGRPTGRPGTPRTGPRTGPRGTRPTGPRTGRPTGRPTGRPTGPRTG
>Pan_troglodytus
PTGPTGRPTGRPTGPRTGPRTGRPTGPRTGRPGTRPTGPTGRPTGRPTGRPTGRPTGRPTGRPTGPTGRPTGRPTGRPGTPTGRPTG
d = {'A':'T','C':'G','T':'A','G':'C'}
with open("seqs.fasta", 'r') as in_file:
for line in in_file:
if line != '\n': # skip empty lines
line = line.strip() # Remove new line character (I'm working on windows)
if line.startswith('>'):
head = line
else:
print head
print ''.join(d[nuc] for nuc in line[::-1])
>homo_sapiens
CAGTACGTACGTACGTACGTACGTACGTCAGTCAGTCAGTACGTCAGTCAGTCAGTCAGTACGTACGTCATGACGTACGT
ACTGACGT
>Canis_lupus
CATGACTGCATGCATGACGTCAGTACGTCAGTACTGCAGTCATGCATGCATGCATGCATGCAGTACTGACTGACGTCATG
ACTGCATGCATGCATGACTG
>Pan_troglodytus
ATGATGCATGCATGACTGACTGCATGACTGCAGTCATGATGCATGCATGCATGCATGCATGCATGATGCATGCATGCAGT
ATGCATG