仅提取 fasta 序列 python
Pulling out only fasta sequences python
我想读入一个大文件,其中包含 fasta 序列(1 header 和 header 下方的 1 行序列)以及行与行之间的其他随机垃圾和无组织的间距。
我想读入每一行,如果一行以“>”符号开头,这就是 fasta 序列 header 的开始方式,则将 header 与下一个一起拉出这将是序列的行。
我有一个小示例数据文件要显示:
> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
GCTAGCACCATGGAGACAGACACACTCCTGCTATG
Task 2: Subclone the synthesized
junk
junk
>4
GCTAGCACCATGGAGACAGAC
我的代码:
f=open("File.fasta", "r")
fastaseq = open("OnlyFastaseq.fasta", "w")
for line in f:
line = line.strip('\n')
if line.startswith(">"):
title = line.rstrip()
seq = f.readline()
seq = seq.rstrip()
fastaseq.write(title+"\n"+seq+"\n")
期望输出:
> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
GCTAGCACCATGGAGACAGACACACTCCTGCTATG
>4
GCTAGCACCATGGAGACAGAC
结果包含 header+ 序列的大部分,除了 '>3' 序列,它 没有拉下一行 (这是序列) 出去。
> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
>4
GCTAGCACCATGGAGACAGAC
您可以通过遍历输入并找到以 >
开头的行来过滤掉那些,然后从输入文件中写入该行和 next
,例如:
with open('File.fasta') as fin, open('OnlyFastaseq.fasta', 'w') as fout:
for line in fin:
if line.startswith('>'):
fout.write(line)
fout.write(next(fin))
您可能想试试 BioPython。它当然可以用 'open' 和一些解析来完成,但是 BioPython 有很多其他功能。要一次阅读一个序列,您可以使用。
from Bio import SeqIO
fastaFile = "foo.fasta"
handle = open(fastaFile,"r")
for record in SeqIO.parse(handle,"fasta"):
print record.id
handle.close()
有关详细信息,请参阅 SeqIO docs。
以下代码将给出所需的输出。它仅打印以 >
开头的 headers 和有效序列,即仅 ATGC.
f = open("File.fasta", "r")
for line in f:
line = line.strip('\n')
if line.startswith(">"):
title = line.strip()
print(title)
else:
seq = line.strip().upper()
if 0 not in [c in 'ATGC' for c in seq]:
print(seq)
我想读入一个大文件,其中包含 fasta 序列(1 header 和 header 下方的 1 行序列)以及行与行之间的其他随机垃圾和无组织的间距。
我想读入每一行,如果一行以“>”符号开头,这就是 fasta 序列 header 的开始方式,则将 header 与下一个一起拉出这将是序列的行。
我有一个小示例数据文件要显示:
> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
GCTAGCACCATGGAGACAGACACACTCCTGCTATG
Task 2: Subclone the synthesized
junk
junk
>4
GCTAGCACCATGGAGACAGAC
我的代码:
f=open("File.fasta", "r")
fastaseq = open("OnlyFastaseq.fasta", "w")
for line in f:
line = line.strip('\n')
if line.startswith(">"):
title = line.rstrip()
seq = f.readline()
seq = seq.rstrip()
fastaseq.write(title+"\n"+seq+"\n")
期望输出:
> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
GCTAGCACCATGGAGACAGACACACTCCTGCTATG
>4
GCTAGCACCATGGAGACAGAC
结果包含 header+ 序列的大部分,除了 '>3' 序列,它 没有拉下一行 (这是序列) 出去。
> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
>4
GCTAGCACCATGGAGACAGAC
您可以通过遍历输入并找到以 >
开头的行来过滤掉那些,然后从输入文件中写入该行和 next
,例如:
with open('File.fasta') as fin, open('OnlyFastaseq.fasta', 'w') as fout:
for line in fin:
if line.startswith('>'):
fout.write(line)
fout.write(next(fin))
您可能想试试 BioPython。它当然可以用 'open' 和一些解析来完成,但是 BioPython 有很多其他功能。要一次阅读一个序列,您可以使用。
from Bio import SeqIO
fastaFile = "foo.fasta"
handle = open(fastaFile,"r")
for record in SeqIO.parse(handle,"fasta"):
print record.id
handle.close()
有关详细信息,请参阅 SeqIO docs。
以下代码将给出所需的输出。它仅打印以 >
开头的 headers 和有效序列,即仅 ATGC.
f = open("File.fasta", "r")
for line in f:
line = line.strip('\n')
if line.startswith(">"):
title = line.strip()
print(title)
else:
seq = line.strip().upper()
if 0 not in [c in 'ATGC' for c in seq]:
print(seq)