当前位置: 首页 > 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.lryc.cn/news/603478.html

相关文章:

  • openbmc 阈值sensor分析
  • 计算机视觉(CV方向)算法基础
  • SketchUp纹理贴图插件Architextures安装使用图文教程
  • Linux sshfs 安全挂载远程文件系统 命令详解
  • Angular面试题目和答案大全
  • AR辅助前端设计:虚实融合场景下的设备维修指引界面开发实践
  • Mac m系列芯片安装node14版本使用nvm + Rosetta 2
  • YotoR模型:Transformer与YOLO新结合,打造“又快又准”的目标检测模型
  • VUE -- 基础知识讲解(一)
  • 【MySQL】数据库的简单介绍
  • Node.js 内置模块
  • 安卓模拟器 adb Frida hook 抓包
  • uniapp如何封装uni.request 全局使用
  • 自适应双门限的能量检测算法
  • 2025年中科院1区SCI-冬虫夏草优化算法Caterpillar Fungus Optimizer-附Matlab免费代码
  • 09 RK3568 Debian11 ES8388 模拟音频输出
  • 电磁兼容(EMC):整改案例(十三)屏蔽外壳开孔解决433MHz无线通信问题
  • vue3+vite 使用liveplayer加载视频
  • 【学习路线】游戏开发大师之路:从编程基础到独立游戏制作
  • BehaviorTree.Ros2 编译教程
  • java导入pdf(携带动态表格,图片,纯java不需要模板)
  • 前端基础之《Vue(26)—Vue3两种语法范式》
  • Spring MVC数据传递全攻略
  • 黑客哲学之学习笔记系列(一)
  • bash变量名不能有连字符
  • mac 字体遍历demo
  • SpringBoot 的@Repository 等注解的底层实现原理
  • PostgreSQL锁机制详解:从并发控制到死锁检测
  • 分布式时序数据库的特点解析
  • 网络原理 - TCP/IP(一)