一学就会的fasta文件解析

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一学就会的fasta文件解析

python作为脚本语言,他比shell的表达能力更强,比c语言更容易使用,用作解析文件是再好不过的。

针对一个fasta文件,比如下面这个这个文件,虽然很短,但包含了fasta中所有的情况,即seq序列有放在一行的情况,也有放在多行的情况(对fasta文件不熟悉的同学,可以去复习Fasta和Fastq文件)。

>seq1
AGCTAGCT
>seq2
AAAAAAAAAA
>seq3
AGCTGGGGAAAAAA
AAAAA

这里先给出python程序(假定上面的fasta文件内容存在test.fa文件中)

def parse_fasta(fasta_path):
    f = open(fasta_path, 'r')
    seqs = {}  # 用一个字典去存储解析出来的序列
    seq_name = None
    for line in f:  # 这里没有直接用read()方法,是为了避免出现文件过大,难以一次性读入内存
        if not line:break
        if line.startswith('>'):
            # 以>开头,说明是含有序列名的行
            seq_name = line[1:].strip('\n')
            if seq_name not in seqs:
                seqs[seq_name] = ''
        else:
            seqs[seq_name] += line.strip('\n')
    return seqs

通过循环结构一行一行的解析文件,将序列名和序列本身一一对应起来。但是需要使用一个字典来存储解析得来的序列,在序列内容非常大时,会对内存造成一定压力。下面我们来使用生成器来改造我们的代码。

def parse_fasta(fasta_path):
    f = open(fasta_path, 'r')
    seq_name = None
    seq = None
    for line in f:  # 这里没有直接用read()方法,是为了避免出现文件过大,难以一次性读入内存
        if not line:break
        if line.startswith('>'):
            # 以>开头,说明是含有序列名的行
            seq_name = line[1:].strip('\n')
            if seq:
                yield seq_name,seq
            seq = ''
        else:
            seq += line.strip('\n')
    yield seq_name,seq

在生成器版本中,我们将字典换成了一个变量,这样程序只需要保存一个变量,这样就减少了内存压力。

相关文章
|
1月前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
1月前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
173 0
|
1月前
|
存储 安全 数据管理
Linux文件时间戳:解析时区与修改时间的相互作用
Linux文件时间戳:解析时区与修改时间的相互作用
57 2
|
5天前
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容
14 0
|
1月前
|
IDE 开发工具 Python
python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
【5月更文挑战第14天】python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
55 6
|
1月前
|
自然语言处理 前端开发 API
解析CSS文件
【5月更文挑战第23天】解析CSS文件。在Python中,可以使用一些第三方库来帮助解析CSS文件,例如`cssutils`。
29 2
|
1天前
|
XML JavaScript Java
解析XML文件的几种方法
解析XML文件的几种方法
|
3天前
|
机器学习/深度学习 存储 算法
技术好文:ttf文件结构解析
技术好文:ttf文件结构解析
|
24天前
|
安全 Linux
Linux命令深度解析:`chgrp` - 改变文件或目录的组所有权
`chgrp`是Linux命令,用于改变文件或目录的组所有权。基本语法是`chgrp [选项] 新组 文件或目录...`。常用选项包括`-R`(递归更改)、`-c`(显示诊断信息)和`-v`(详细输出)。例如,`chgrp developers example.txt`将文件`example.txt`的组更改为`developers`。注意,需有相应权限才能执行此命令,且理解更改所有权可能影响系统安全。
|
26天前
|
Ubuntu Linux 开发者
解析deb与rpm文件的操作技巧
解析deb与rpm文件的操作技巧
37 0

推荐镜像

更多