首页 > 其他分享 >提取最长转录本

提取最长转录本

时间:2022-09-28 17:55:49浏览次数:53  
标签:提取 file len col 转录 str print line 最长

点击查看代码
#!/usr/bin/env python
# -*- coding=utf-8 -*-
 
'''
提取序列文件中最长的转录本ID
需要修改######位置的参数 以及 open的目录
'''
 
import sys
import re
 
Fasta=open("/Business/psn_company/sc01/Workbase_Wangcanbiao/reference/MF_new/pep.fa","r")
Sequence={}
 
## 1.创建ID和序列的字典
for line in Fasta.readlines():
  content=line.strip()
  if content.startswith(">"):
    nameS=content[1:]
    name=re.sub(" .*$","",nameS)       ######修改一下序列的header
    Sequence[name]=''
  else:
    Sequence[name]+=content
Fasta.close()
#print(Sequence.keys())
 
 
## 2.提取每个转录本的序列长度,形成三列
Out=open("./gene_id_len.txt","w")
for i in Sequence.keys():
    #print(i+"\t"+str(len(Sequence[i]))+"\t"+i.split(".")[0]+"\n")
    Out.write(i+"\t"+str(len(Sequence[i]))+"\t"+i.split(".")[0]+"\n")   #第一列是转录本ID,第二列是转录本长度,第三列是gene ID
Out.close()
 
 
## 3.这一步准备对out文件进行排序,找到每个基因最长的转录本
from operator import itemgetter
gene_id_len=open("./gene_id_len.txt","r")
table = []
for line in gene_id_len:
    col = line.strip().split("\t")
    col[0] = str(col[0])
    col[1] = int(col[1])
    col[2] = str(col[2])
    table.append(col)                                              #生成嵌套式列表
#print(table)
table_sorted = sorted(table, key=itemgetter(2, 1),reverse=True)                 #先后按列索引2,1排序
#print(table_sorted)
output_file = open("./gene_id_len_sorted.txt","w")
for row in table_sorted:                                           #遍历读取排序后的嵌套列表
    row = [str(x) for x in row]                                    #列表要转换为字符串才可以写入文本
    output_file.write("\t".join(row) + '\n')
output_file.close()
 
 
## 4.找到最长转录本
input_file=open("./gene_id_len_sorted.txt","r")
dict2={}
for line in input_file.readlines():
    col = line.strip().split("\t")
    col[0] = str(col[0])
    col[1] = int(col[1])
    col[2] = str(col[2])
    if col[2] not in dict2:
        dict2[col[2]]=col[0]
    else:
        dict2[col[2]]+= '\t'+col[0]
#print(dict2)                     
#print(dict2.values())
list_values=list(dict2.values())
#print(list_values)
result_file = open("./longest_pep_id.txt","w")
for line in list_values:
    col = line.strip().split("\t")
    col[0] = str(col[0])
    #print(col[0])
    result_file.write(col[0]+"\n")
result_file.close()

zcat hairpin.fa.gz | seqkit grep -f list > new.fa

标签:提取,file,len,col,转录,str,print,line,最长
From: https://www.cnblogs.com/-bonjour/p/16739048.html

相关文章

  • 如何提取 IOS Document_apis
    关于IOS私有库的搭建,⽹上的教程很少,目前为止,发现的⼀个⽐较好的⽂章,是教你私有库的搭建和扫描,但是⽂章因为存在时间⽐较⻓,套在现在框架中,难免有些不适⽤,我就在⼤神(Deft_MK......
  • Q4.4.6.1. 区间最长不上升子串
    Q4.4.6.1.区间最长不上升子串BZOJ4491.我也不知道题目名字是什么差分,转化为连续区间上最长>=0或<=0的区间每个节点维护区间前缀最大值,后缀最大值,区间答案......
  • 使用Python将TXT文件提取到Excel表格当中
    importrowasrowimportxlwtdefwriteinexcel():f=open('bZhanRank.txt','r',encoding='utf-8')#打开数据文本文档,注意编码格式的影响wb=xlwt.......
  • 动态规划之最长递增子序列
    给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1......
  • Delphi 从字符串中提取数字
    functionGetNumberFromStr(strIn:string;sFlag:string):string;vari:Integer;tempStr:string;begintempStr:='';ifLength(strIn)=0thenbeg......
  • 895. 最长上升子序列
    最基础的最长上升子序列问题这里用的是dp做法定义f[i]为从1~i的所有上升子序列最大的长度双重循环,以a[i]为最后一个数,枚举所有小于a[i]的数a[j]作为倒数第二个数,对于所......
  • LeetCode[2414. 最长的字母序连续子字符串的长度]
    2414.最长的字母序连续子字符串的长度双指针classSolution{public:intlongestContinuousSubstring(strings){intres=0;for(inti=......
  • 最长递增子段
    ★实验任务YZF有一个序列A,由n个整数组成。我们将子段A称为Ai、Ai+1、Ai+2、…Aj(1<=i<=j=n)表示A的子段。你的任务是找到A的最长的子段,这样就可以从子段最多......
  • 图像特征提取
    1、角点的定义如果一个点在任意方向的微小变动都会导致灰度很大的变化,那么这个点就被称为角点。也就是一阶导数中的局部最大值就是角点。2、Harris角点检测harris角点具......
  • 最长公共前缀
    描述给你一个大小为n 的字符串数组strs,其中包含n个字符串,编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。 数据范围: 0\len\le50000≤n......