当前位置: 首页 > news >正文

getgff.py脚本-python006

 getgff.py  用于wgdi

用法

python deal_gff.py \speice1.filter.gff3 \speice1_gene_longest_trans.cds.fa \speice1_gene_longest_trans.pep.fa \speice1

WGDI-分析WGD及祖先核型演化的集成工具-文献精读126_wgdi祖先染色体核型-CSDN博客

import sys
import re
import pandas as pd
from Bio import SeqIO
# python deal_gff.py gff cds pep markdef read_gff(file):data=[]with open(file) as f:for line in f.readlines():if re.match(r"^#", line):continuearr = line.strip().split('\t')if len(arr)<9:continuedata.append(arr)return data
data = read_gff(sys.argv[1])
gff = pd.DataFrame(data)
gff = gff[gff[2] == 'mRNA']
gff = gff.loc[:, [0, 8, 3, 4, 6]]
gff[8] = gff[8].str.split('=|;',expand=True)[1]
# gff.drop_duplicates(subset=[8], keep='first', inplace=True)
gff[0] = gff[0].str.replace('Chr0?','')
gff.columns = [0,1,2,3,4]
gff[2] =gff[2].astype(int)
gff[3] =gff[3].astype(int)
for name, group in gff.groupby(0):if len(group) == 1:continuestart=0group = group.sort_values(by=[2,3],ascending=[True,False])for index, row in group.iterrows():if row[3]>start and row[2]>start:start=min([row[3],row[2]])continuegff.drop(index=index, inplace=True)gff['order'] = ''
gff['newname'] = ''
for name, group in gff.groupby([0]):number = len(group)group = group.sort_values(by=[2])gff.loc[group.index, 'order'] = list(range(1, len(group)+1))gff.loc[group.index, 'newname'] = list([str(sys.argv[4])+str(name)+'g'+str(i).zfill(5) for i in range(1, len(group)+1)])
gff['order'] = gff['order'].astype('int')
gff = gff[[0, 'newname', 2, 3, 4, 'order', 1]]
gff = gff.sort_values(by=[0, 'order'])
gff.to_csv(str(sys.argv[4])+'.gff', sep="\t", index=False, header=None)
lens = gff.groupby(0).max()[[3, 'order']]
lens.to_csv(str(sys.argv[4])+'.lens', sep="\t", header=None)id_dict = gff.set_index([1])['newname'].to_dict()
#cds
seqs = []
n = 0
for seq_record in SeqIO.parse(sys.argv[2], "fasta"):if seq_record.id in id_dict:seq_record.id = id_dict[seq_record.id]n += 1else:continueseqs.append(seq_record)
SeqIO.write(seqs, str(sys.argv[4])+'.cds.fa', "fasta")
print('cds: '+str(n))#pep
seqs = []
n = 0
for seq_record in SeqIO.parse(sys.argv[3], "fasta"):if seq_record.id in id_dict:seq_record.id = id_dict[seq_record.id]n += 1else:continueseqs.append(seq_record)
SeqIO.write(seqs, str(sys.argv[4])+'.pep.fa', "fasta")
print('pep: '+str(n))
http://www.dtcms.com/a/304520.html

相关文章:

  • 【学习路线】游戏开发大师之路:从编程基础到独立游戏制作
  • 2025年科研算力革命:8卡RTX 5090服务器如何重塑AI研究边界?
  • react 项目怎么打断点
  • vite + chalk打印输出彩色命令行
  • 基于Dify构建本地化知识库智能体:从0到1的实践指南
  • 橡胶制品加工:塑造生活的柔韧力量
  • python基础:request请求Cookie保持登录状态、重定向与历史请求、SSL证书校验、超时和重试失败、自动生成request请求代码和案例实践
  • Python批量生成N天前的多word个文件,并根据excel统计数据,修改word模板,合并多个word文件
  • 中科米堆CASAIM金属件自动3d测量外观尺寸三维检测解决方案
  • 火山方舟使用豆包基模 —— 基础流程
  • 深港同心·科创启航——“智创探索+实习计划”启航礼在前海举行
  • 三十、【Linux邮件服务器】搭建Postfix邮件服务器
  • Ubuntu卡在启动画面:显卡驱动与密码重置
  • ubuntu18.04制作raid0
  • Ubuntu 部署 PaddleOCR 完整指南
  • Ubuntu 抽取系统制作便于chroot的镜像文件
  • C#开发基础之深入理解“集合遍历时不可修改”的异常背后的设计
  • 三十一、【Linux网站服务器】搭建httpd服务器演示个人主页、用户认证、https加密网站配置
  • Solar月赛(应急响应)——攻击者使用什么漏洞获取了服务器的配置文件?
  • GESP2025年6月认证C++七级( 第三部分编程题(2)调味平衡)
  • cuda中的线程块和线程束的区别以及什么是串行化 (来自deepseek)
  • 1 + X 传感网 中级 | 任务五 Wifi通信实践
  • 向量数据库深度解析:FAISS、Qdrant、Milvus、Pinecone使用教程与实战案例
  • Excel文件批量加密工具
  • 哈希函数详解:从MD5到SHA-3的密码学基石
  • JSON-RPC 2.0 规范
  • 寻找重复元素-类链表/快慢指针
  • 【lucene】currentFrame与staticFrame
  • Springboot+vue智能家居商城的设计与实现
  • 数据赋能(341)——技术平台——模块化