fasta文件与fastq文件相互转化Python脚本

fa文件与fq文件互相转换

今天分享的内容是fasta文件与fastq文件的基本知识,以及通过Python实现两者互相转换的方法。

测序数据公司给的格式通常是fq.gz,也就是fastq文件,计算机的角度来说,生物的序列属于一种字符串,就是一堆字母,这些字母就蕴含了遗传信息。

通过序列拼接将fastq转换为fasta,通过短序列比对将fastq与fasta合并为bam,通过变异检测将bam中突变位点提取出来转换为vcf,这就是上游分析的套路。

fastq文件基本格式
alt

可以看出fq文件包含了更多的信息,比如测序质量,碱基信息等,这些是通过测序仪产生的数据。

fasta文件基本格式

alt 对比一下可以看出,fa文件主要是两部分,大于号开头的是序列的ID,下一行是序列,相比于fq文件,少了质量信息。

将fasta文件转换为fastq文件

分享一个Python脚本实现这个操作:

import sys

fa_f = sys.argv[1]
fq_f = sys.argv[2]
len_max = int(sys.argv[3])  # fq len max: 150bp

with open(fa_f, 'r'as f, open(fq_f, 'w'as pf:
    while True:
        name = f.readline().strip()
        if not name:
            break
        if name.startswith('>'):
            tmp_name = name.strip('>')
            read_id = '@'+tmp_name
        seq = f.readline().strip()
        if len(seq) <= len_max:
            read_info = '{rd_id}\n{seq}\n+\n{qual}\n'.format(rd_id=read_id, seq=seq, qual='F'*len(seq))
        else:
            read_info = ''
            cnt = int(len(seq) / len_max)
            for i in range(cnt):
                tmp_id = read_id + '_' + str(i)
                tmp_seq = seq[i*len_max:(i+1)*len_max]
                read_info += '{rd_id}\n{seq}\n+\n{qual}\n'.format(rd_id=tmp_id, seq=tmp_seq, qual='F'*len_max)
            lseq = len(seq) % len_max
            if lseq != 0:
                tmp_id = read_id + '_' + str(cnt)
                tmp_seq =seq[-lseq:]
                read_info += '{rd_id}\n{seq}\n+\n{qual}\n'.format(rd_id=tmp_id, seq=tmp_seq, qual='F'*lseq)
        pf.write(read_info)

使用的方法也很简单,把这个脚本保存为xx.py,然后运行并添加三个参数,第一个是原始fasta文件名,第二个是输出文件名,第三个参数是数字,表示每条序列的最大长度,超过该长度的序列将会被切分成多条。

原理解释

刚刚这段Python脚本的功能是将fasta格式的序列文件转换为fastq格式的序列文件,并且可以对序列进行分割,使得每条序列的长度不超过指定的最大长度。

功能:

读取输入的fasta格式的序列文件。 将fasta序列文件中的序列转换为fastq格式。 如果序列长度超过指定的最大长度(len_max),则将长序列分割成多个子序列,每个子序列长度不超过len_max。 将转换后的fastq格式的序列写入输出文件中。

原理:

通过命令行参数传入fasta格式的序列文件路径(fa_f)、要生成的fastq序列文件路径(fq_f)和最大序列长度(len_max)。 使用with open()语句打开fasta序列文件和要生成的fastq序列文件。

逐行读取fasta序列文件,每次读取两行:第一行为序列ID,第二行为序列信息。 对于每条序列,如果序列长度不超过指定的最大长度,则直接转换为fastq格式;否则,将长序列分割成多个子序列,每个子序列长度不超过len_max。

将fastq文件转换为fasta文件

同样,我们也可以使用Python将fq文件转换为fa文件:

import sys
import gzip 

fq_in = sys.argv[1]
fa_out = sys.argv[2]
reads_count = sys.argv[3]  # if set [-1], means output all reads

with gzip.open(fq_in, 'r') as f, open(fa_out, 'w') as pf:
    cnt = 0
    while True:
        rd_id = f.readline()
        if not rd_id or cnt==int(reads_count):
            break
        seq = f.readline()
        tmp = f.readline()
        qual = f.readline()
        pf.write('>'+rd_id+seq)
        cnt+=1

这段Python代码是一个简单的脚本,用于将gzip压缩的Fastq文件(.fq.gz文件)转换为普通的Fasta文件(.fa文件), 下面是代码的原理和作用:

首先,导入了sys和gzip模块,sys用于接收命令行参数,gzip用于解压缩.fq.gz文件。 从命令行参数中获取输入Fastq文件路径(fq_in)、输出Fasta文件路径(fa_out)和要输出的reads数量(reads_count)。

使用gzip.open函数打开输入的Fastq文件,以只读模式打开。使用open函数打开输出的Fasta文件,以写入模式打开。 设置一个计数器cnt,用于记录已经处理的reads数量。

进入一个无限循环,循环中读取Fastq文件中的每个reads信息: 读取reads的ID行(以'@'开头的行)作为rd_id。 读取reads的序列行作为seq。 读取reads的空行(通常为'+')作为tmp。 读取reads的质量信息行作为qual。

将reads的ID和序列信息写入输出的Fasta文件中,格式为>rd_idseq。 计数器cnt加一。 如果读取的reads数量达到指定的reads_count值,则退出循环。 循环结束后,关闭输入和输出文件。

总的来说,将压缩的Fastq文件解压缩并转换为Fasta格式,同时可以根据指定的reads数量控制输出的reads数量。代码中使用了gzip模块解压缩文件,以及文件读取和写入操作,最终实现了Fastq到Fasta的转换。

以上就是今天分享的全部内容,感谢您的阅读,如果感觉有用,欢迎收藏或者转发,您的支持是我更新的最大动力。

参考资料:
https://blog.csdn.net/sinat_32872729/article/details/117353884
https://blog.csdn.net/weixin_46128755/article/details/127947650
https://zhuanlan.zhihu.com/p/77874271

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/519804.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《汇编语言》- 读书笔记 - 第17章-使用 BIOS 进行键盘输入和磁盘读写

《汇编语言》- 读书笔记 - 第17章-使用 BIOS 进行键盘输入和磁盘读写 17.1 int9 中断例程对键盘输入的处理键盘缓冲区 17.2 使用 int 16h 中断例程读取键盘缓冲区编程检测点 17.1 17.3 字符串的输入编程&#xff1a;字符串输入程序需求分析处理过程子程序完整代码 17.4 应用 in…

干货分享③:免费制作产品管理系统!

他来了&#xff0c;他来了&#xff0c;他带着码上飞CodeFlying走来了&#xff01;今天继续为大家带来一期干货分享&#xff0c;教大家如何免费使用码上飞来的开发产品管理系统 &#xff01; 一、登陆官网 码上飞 CodeFlying | AI 智能软件开发平台&#xff01; 点击立即体验注…

官方教程 | 在 OpenBayes 平台进行组织协作

想和好 homie 共享账户余额、存储、数据集、模型、容器等资源&#xff0c;又不想共享自己的账户密码&#xff1f; 想跟团队成员分工协作、高效 Coding、加速炼丹&#xff0c;又想隔离权限、差异化管理&#xff1f; 经过为期半年的内测和完善&#xff0c;OpenBayes贝式计算的组织…

物体检测-系列教程23:YOLOV5 源码解析13 (SPP层、Flatten模块、Concat模块、Classify模块)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 17、SPP模块 17.1 SPP类 SPP是一种特殊的池化策略&#xff0c;最初在YOLOv3-SPP中被使用…

AD20软件使用指南:拼板操作与Gerber文件生成详解

文章目录 一、前言二、拼板1.创建新的PCB&#xff0c;用于放置拼板文件2.放置拼板阵列3.设置阵列信息4.V割拼板&#xff0c;放置工艺边和定位孔和光点5.完成拼板 三、生成Gerber文件1.输出Gerber文件2.选择单位和格式3.选择输出的图层4.生成Gerber文件5.生成钻孔文件 四、上传嘉…

Pytorch学习 day06(torchvision中的datasets、dataloader)

torchvision的datasets 使用torchvision提供的数据集API&#xff0c;比较方便&#xff0c;如果在pycharm中下载很慢&#xff0c;可以URL链接到迅雷中进行下载&#xff08;有些URL链接在源码里&#xff09;代码如下&#xff1a; import torchvision # 导入 torchvision 库 # …

TC397 Tasking CMake Gitlab CI CD 环境配置

文章目录 Aurix Development Studio 新建工程与配置Tasking 环境配置CMake 集成Win CMake MinGW 安装Tasking Toolchain 工具链CMakeLists.txtPowershell 脚本 Gitlab CI CDGithub Link 本篇先演示了ADS新建激活编译工程, 讲述了浮点模型, 链接脚本文件, 静态库集成等的设置, 接…

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数如何访问全局api 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });如何…

01背包问题 刷题笔记

思路 dp 用f[i][j]来表示当体积为j时 考虑前i件物品可以获得的 最大值 记住f[i][j]本身是个价“价值” 考虑两种状态 是否将第i件物品放入背包里面 将背包的体积从小到大递增来进行考虑 首先 考虑条件 如果当前增加的体积放不下下一件物品 则该体积 可以获得的最大值可以直接…

和为K的子数组

题目&#xff1a; 使用前缀和的方法可以解决这个问题&#xff0c;因为我们需要找到和为k的连续子数组的个数。通过计算前缀和&#xff0c;我们可以将问题转化为求解两个前缀和之差等于k的情况。 假设数组的前缀和数组为prefixSum&#xff0c;其中prefixSum[i]表示从数组起始位…

基于YOLOv5的驾驶员疲劳驾驶行为​​​​​​​检测系统

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了疲劳驾驶行为检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量…

MySQL事务隔离级别

文章目录 一、前置知识1、为什么要隔离级别&#xff1f;1、隔离级别种类2、查看/设置隔离级别3、手动控制事务4、事务的锁信息查看 二、实战1、READ UNCOMMITTED2、READ COMMITTED3、REPEATABLE READ4、SERIALIZABLE 三、总结 一、前置知识 1、为什么要隔离级别&#xff1f; …