原始文件:
id start end
a1 10 19
a1 25 34
a2 89 124
a2 149 167
a2 188 221
目的文件:
a1 1 10
a1 16 25
a2 1 36
a2 61 79
a2 100 133
解释说明:
原始文件是gff3文件的一部分,第一列id是基因的名字,第二列和第三列分别是外显子在全基因组上的起始位置和终止位置,目的文件中第一列是基因名字,第二列和第三列分别是外显子相对于单个基因的起始位置和终止位置。
接下来是代码:
# 加工gff3为了计算出内含子和外显子的位置
import pandas as pd
list1=[]
list2=[]
b=open("47out1.txt","w")
with open("47.txt","r") as f1:df1=pd.read_table(f1,index_col=0)df1["id1"]=df1.indexdf1["id1_start_end"]=df1["id1"]+","+df1["start"].astype(str)+","+df1["end"].astype(str)df2=df1.iloc[:,[3]]df3 = df2.groupby("id").apply(lambda x: x["id1_start_end"].tolist())for i in range(len(df3)):list1.append(",".join(df3[i]))for i in list1:i=i.strip().split(",")# " ".join(i)for j in range(0, len(i)):if i[j]==i[0]:list2.append(i[j])elif i[j]!=i[0]:list2.append(str(int(i[j]) - int(i[1]) + 1) )
for i in range(len(list2)):if i % 3 == 0:b.write(str(list2[i])+"\t"+str(list2[i+1])+"\t"+str(list2[i+2])+"\n")# print(list2[i],list2[i+1],list2[i+2])