fastq文件转换成fasta文件

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: fastq文件转换成fasta文件

本文以下面这个fastq文件为例,将fastq文件转成fasta文件

@seq1
AAAAAAAAAAAAAAAAAGGCGGGGCGCGGCTTTTTTTT
+
??????????????????????????????????
@seq2
GGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCC
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

思路

  • 解析fastq文件,提取对应的序列名和序列本身,不熟悉fastq文件的同学可以复习这里Fasta和Fastq文件
  • 根据fasta的格式,将序列名和序列按照fasta文件的格式进行写入
def parse_fastq(fastq_path):
    """ 解析fastq文件
        fastq文件以四行为一个单位
        1. @seqname
        2. seq
        3. +
        4. %%%???)))   质量值
    """
    seq_name = None
    seq = None
    with open(fastq_path, 'r') as f:
        for line in f:
            if line.startswith('@'):
                """ 序列名所在的行以@开头 """
                seq_name = line[1:].strip('\n')
                if seq:
                    yield seq_name, seq
                    seq = None
            if line.startswith('+'):
                pass
            if 'A' in line or 'G' in line or 'C' in line:
                # 这里通过判断某个碱基是否在line里面
                # 来确定这一行到底是seq行,还是质量值的行
                seq = line.strip('\n')
        yield seq_name, seq

上面解析文件的方法是通过来判断每一行中的一些特征来确定每一行的内容,但是不够灵活,下面给出一种较灵活的写法。

def parse_fastq(fastq_path):
    """ 解析fastq文件
        fastq文件以四行为一个单位
        1. @seqname
        2. seq
        3. +
        4. %%%???)))   质量值
    """
    seq_name = None
    seq = None
    count = 0
    with open(fastq_path, 'r') as f:
        for line in f:
            # 每次都加1,
            # 后面通过将count重置为1来进行4行为一个单元的划分
            count += 1 
            if line.startswith('@'):
                """ 序列名所在的行以@开头 """
                seq_name = line[1:].strip('\n')
                if seq:
                    yield seq_name, seq
                    seq = None
                    count = 1  # 遇到@开头的行,将count重置为1
            if count == 2:
                seq = line.strip('\n')
        yield seq_name, seq

上面这种解析方法通过利用fastq文件四行为一个单位这个信息,按照特定的规律来进行解析,大大增加了程序的灵活性。现在我们已经成功解析出来了fastq文件转成fasta文件所必需的信息,下面就可以将信息以fasta格式进行写入。

def _convert(fastq_path):
    result = []
    for fastq in parse_fastq(fastq_path):
        seq_name = fastq[0]
        seq = fastq[1]
        result.append('>' + seq_name + '\n' + seq)  # fasta文件的格式
    return '\n'.join(result)
def fastq_to_fasta(fastq_path,fasta_path):
  with open(fasta_path,'w') as f:
    f.write(str(_convert(fastq_path)))

至此,我们已经完成了fastq文件向fastq文件进行转化的任务。你可以通过调用fastq_to_fasta来进行转换任务。

相关文章
|
前端开发 API
图片或文件Blob、File、Base64之间的相互转换
在做前端项目的时候,遇到图片的上传或者下载时,不可避免的会遇到Blob、File、Base64三种类型的转换。那么今天就总结下,三者之间的相互转换。 首先我们看看base64 ,File 对象,Blob 对象长什么样的,怎么来的。
559 1
|
7月前
|
数据格式 Python
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
560 0
|
编解码 JavaScript 安全
我把文件重新编码后,加载速度提升300%!(下)
我把文件重新编码后,加载速度提升300%!
120 0
我把文件重新编码后,加载速度提升300%!(下)
|
编解码 JSON 缓存
我把文件重新编码后,加载速度提升300%!(上)
我把文件重新编码后,加载速度提升300%!
112 0
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
301 0
|
算法
三行代码将Excel转为任意格式的Word
大家好,我是志斌~ 今天来跟大家分享一个实际案例需求,本文来自小明大佬的创作~
214 0
三行代码将Excel转为任意格式的Word
|
SQL 区块链 C#
C#将本地图片转换成二进制
  C#有很多种上传图片的方式,今天介绍一种将本地图片转换成二进制保存到数据库的方式。   一、将图片转换成二进制工具   ///   /// 将本地图片转换成二进制   ///   ///   ///   public static Byte[] GetContent(string filepath)
853 0
|
测试技术 iOS开发 MacOS
Excel文件转成MD格式
常规用例,文件转换 Mac OS 版本请在命令行下直接使用exceltk,不用带exe后缀,MacOS的安装包自动配置好环境变量 整个表格 exceltk.
1418 0