本文介绍了如何从Fasta文件中删除所有N个序列条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想删除所有核苷酸均为N的fasta文件条目,但不删除包含ACGT和N个核苷酸的条目.

I would like to remove entries of a fasta file where all nucleotides are N, but not entries which contain ACGT and N nucleotides.

来自输入文件内容的示例:

from an example of input file content:

#>seq_1
TGCTAGCTAGCTGATCGTGTCGATCG
CACCACANNNNNCACGTGTCG
#>seq2
NNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNN
#>seq3
catgcatcgacgatgctgacgatc
#>seq4
cacacaccNNNNttgtgca
#...

希望输出文件内容为:

#>seq_1
TGCTAGCTAGCTGATCGTGTCGATCG
CACCACANNNNNCACGTGTCG
#>seq3
catgcatcgacgatgctgacgatc
#>seq4
cacacaccNNNNttgtgca
#...

在使用awk,perl,python和其他工具时有任何建议吗?谢谢!FDS

Any suggestions in doing this with awk, perl, python, other?Thank you!FDS

推荐答案

使用python,使用BioPython模块:

With python, using the BioPython module:

import Bio

INPUT  = "bio_input.fas"
OUTPUT = "bio_output.fas"

def main():
    records = Bio.SeqIO.parse(INPUT, 'fasta')
    filtered = (rec for rec in records if any(ch != 'N' for ch in rec.seq))
    Bio.SeqIO.write(filtered, OUTPUT, 'fasta')

if __name__=="__main__":
    main()

但是请注意,FastA规范指出序列ID应该以>开头,而不是以#>开头!

however note that the FastA spec says sequence ids are supposed to start with >, not #>!

与之对抗

>seq_1
TGCTAGCTAGCTGATCGTGTCGATCG
CACCACANNNNNCACGTGTCG
>seq2
NNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNN
>seq3
catgcatcgacgatgctgacgatc
>seq4
cacacaccNNNNttgtgca

这产生

>seq_1
TGCTAGCTAGCTGATCGTGTCGATCGCACCACANNNNNCACGTGTCG
>seq3
catgcatcgacgatgctgacgatc
>seq4
cacacaccNNNNttgtgca

(请注意,默认换行长度为60个字符).

(Note, the default linewrap length is 60 chars).

这篇关于如何从Fasta文件中删除所有N个序列条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-07 20:48