如何使用python反向补充多序列fasta文件?

如何使用python反向补充多序列fasta文件?,python,while-loop,fasta,dna-sequence,Python,While Loop,Fasta,Dna Sequence,我是python新手,我正在试图弄清楚如何读取具有多个序列的fasta文件,然后创建一个包含序列反向互补的新fasta文件。该文件的外观如下所示: >智人 ACGTCAGTACGTACGTCATGACGTACGTACGTACTACTGACTGACTGACGTACTGACTGACGTACGTACGTACGTACGGTACGTACGTACGTACGTACGTACTG >犬狼疮 CAGTCATGCATGCATGCAGTCAGTCAGTCAGTCAGTACTGCATGCATGCATGCAGCTGCAGT

我是python新手,我正在试图弄清楚如何读取具有多个序列的fasta文件,然后创建一个包含序列反向互补的新fasta文件。该文件的外观如下所示:

>智人 ACGTCAGTACGTACGTCATGACGTACGTACGTACTACTGACTGACTGACGTACTGACTGACGTACGTACGTACGTACGGTACGTACGTACGTACGTACGTACTG

>犬狼疮 CAGTCATGCATGCATGCAGTCAGTCAGTCAGTCAGTACTGCATGCATGCATGCAGCTGCAGTACTGACGTACTGACGCGTCATGCAGTCATGCAGTCATGCATGCATGCATGCGCATGCGCAGTCAGTG

>潘努特罗格杜斯酒店 CATGCATCTGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGACTGCAGTCATGCCAGCATGCATGCATCAT

我正在尝试学习如何使用for和while循环,因此如果解决方案可以包含其中一个循环,那么它将是首选

到目前为止,我以一种非常不公平的方式做到了以下几点:

file1=打开('/path/to/file',r')

file1.close()


这是可行的,但我知道有一种更好的方法来迭代这个结束部分。有更好的解决方案吗?

这里是一个简单的字符串反转示例

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