通过python程序从FASTA文件按顺序排序序列

通过python程序从FASTA文件按顺序排序序列,python,Python,我试图创建一个python程序来读取fasta文件seqs.fa 并让程序按名称对序列进行排序 Fasta文件如下所示: >seqA - human GCTGACGTGGTGAAGTCAC >seqC - gorilla GATGACAA GATGAAGTCAG >seqB - chimp GATGACATGGTGAAGTAAC import sys inFile = open(sys.argv[1], 'r') a = inFile.readlines() a.sort(

我试图创建一个python程序来读取fasta文件seqs.fa 并让程序按名称对序列进行排序

Fasta文件如下所示:

>seqA - human
GCTGACGTGGTGAAGTCAC
>seqC - gorilla
GATGACAA
GATGAAGTCAG
>seqB - chimp
GATGACATGGTGAAGTAAC
import sys

inFile = open(sys.argv[1], 'r')
a = inFile.readlines()
a.sort()
seq = ''.join(a[0:])
seq = seq.replace('\n', "\n")
print seq
我的程序如下所示:

>seqA - human
GCTGACGTGGTGAAGTCAC
>seqC - gorilla
GATGACAA
GATGAAGTCAG
>seqB - chimp
GATGACATGGTGAAGTAAC
import sys

inFile = open(sys.argv[1], 'r')
a = inFile.readlines()
a.sort()
seq = ''.join(a[0:])
seq = seq.replace('\n', "\n")
print seq
预期结果:

>seqA - human
GCTGACGTGGTGAAGTCAC
>seqB - chimp
GATGACATGGTGAAGTAAC
>seqC - gorilla
GATGACAAGATGAAGTCAG
我的结果是:

>seqA - human
>seqB - chimp
>seqC - gorilla
GATGACAA
GATGAAGTCAG
GATGACATGGTGAAGTAAC
GCTGACGTGGTGAAGTCAC
最后四行是大猩猩、黑猩猩和人类序列,大猩猩序列分为前两行


有谁能给我一些关于如何排序或解决问题的方法的提示吗?

您的代码有一些问题。主要的一点是,在readlines返回的列表中,您的描述和序列都是独立的行,因此在对列表排序时,它们彼此分离。此外,所有描述都在序列之前,因为它们的开头有“>”

第二,a[0:]与a相同

第三,seq.replace'\n',\n不会做任何事情。单引号和双引号的意思相同。用换行符本身替换换行符

对于Python来说,读取fasta文件不是一项非常复杂的任务,但是我仍然希望我能够原谅我提供的使用我所使用的包-

以下是我将使用的代码:

In [1]: from pyteomics import fasta

In [2]: with fasta.read('/tmp/seqs.fa') as f:
   ...:     fasta.write(sorted(f))
   ...:     
>seqA - human
GCTGACGTGGTGAAGTCAC

>seqB - chimp
GATGACATGGTGAAGTAAC

>seqC - gorilla
GATGACAAGATGAAGTCAG
要将其保存到新文件,请将其名称指定为as参数:

fasta.write(sorted(f), 'newfile.fa')

一般来说,pyteomics.fasta用于蛋白质序列,而不是DNA,但它可以完成这项工作。也许您可以使用它返回元组中的描述和序列这一事实。

您的代码存在一些问题。主要的一点是,在readlines返回的列表中,您的描述和序列都是独立的行,因此在对列表排序时,它们彼此分离。此外,所有描述都在序列之前,因为它们的开头有“>”

file = open("seqs.fa")    
a = file.readlines()
i = 0
ar = []
while True:
    l1=file.readline()
    l2=file.readline()
    if not (l1 and l2):
        break;
    l = l1.strip('\n') + '////////' + l2
    ar.append(l)
ar = ar.sort()
for l in ar:
    l1 = l.split('////////')[0]+'\n'
    print l1
    l2 = l.split('////////')[1]
    print l2
第二,a[0:]与a相同

第三,seq.replace'\n',\n不会做任何事情。单引号和双引号的意思相同。用换行符本身替换换行符

对于Python来说,读取fasta文件不是一项非常复杂的任务,但是我仍然希望我能够原谅我提供的使用我所使用的包-

以下是我将使用的代码:

In [1]: from pyteomics import fasta

In [2]: with fasta.read('/tmp/seqs.fa') as f:
   ...:     fasta.write(sorted(f))
   ...:     
>seqA - human
GCTGACGTGGTGAAGTCAC

>seqB - chimp
GATGACATGGTGAAGTAAC

>seqC - gorilla
GATGACAAGATGAAGTCAG
要将其保存到新文件,请将其名称指定为as参数:

fasta.write(sorted(f), 'newfile.fa')

一般来说,pyteomics.fasta用于蛋白质序列,而不是DNA,但它可以完成这项工作。也许你可以利用它返回元组中的描述和序列这一事实。

不要自己实现FASTA阅读器!像大多数情况一样,有些聪明人已经为你做了这件事。使用例如。像这样:

file = open("seqs.fa")    
a = file.readlines()
i = 0
ar = []
while True:
    l1=file.readline()
    l2=file.readline()
    if not (l1 and l2):
        break;
    l = l1.strip('\n') + '////////' + l2
    ar.append(l)
ar = ar.sort()
for l in ar:
    l1 = l.split('////////')[0]+'\n'
    print l1
    l2 = l.split('////////')[1]
    print l2
from Bio import SeqIO
handle = open("seqs.fa", "rU")
l = SeqIO.parse(handle, "fasta")
sortedList = [f for f in sorted(l, key=lambda x : x.id)]
for s in sortedList:
   print s.description
   print str(s.seq)

不要自己实现FASTA阅读器!像大多数情况一样,有些聪明人已经为你做了这件事。使用例如。像这样:

from Bio import SeqIO
handle = open("seqs.fa", "rU")
l = SeqIO.parse(handle, "fasta")
sortedList = [f for f in sorted(l, key=lambda x : x.id)]
for s in sortedList:
   print s.description
   print str(s.seq)

我有几点建议。首先,使用复制粘贴,而不是发布屏幕截图。第二,打开一个交互式python解释器——如果您不知道如何使用。现在依次执行这些行。通过键入print a、a.sort、print a等查看每一项的结果。第三,思考sort为什么要做它正在做的事情。然后想想该文件提供了哪些信息,使您能够使它做一些不同的事情。@senderle您的评论让我在问题上寻找[Homegram]标签:我有几个提示。首先,使用复制粘贴,而不是发布屏幕截图。第二,打开一个交互式python解释器——如果您不知道如何使用。现在依次执行这些行。通过键入print a、a.sort、print a等查看每一项的结果。第三,思考sort为什么要做它正在做的事情。然后想想该文件提供了哪些信息,使您能够使它做一些不同的事情。@senderle您的评论让我在问题上寻找[Homegram]标记: