从基因组提取启动子(任意区间)序列

一、gff文件准备

1、准备基因gff文件

从数据库下载

2、excel整理获得输入gff文件

(1)计算正负链:比对结果end-start>0,为正链,反之负链。

(2)在正链中,将小数值减2000(向前2000bp)为一列,向后加200(向后200bp)为一列,并且删掉原来的数值;在负链中,将大数值加2000,小数值减200,得到的是启动子区域的位置。(启动子大小自己确定)

(3)这样的处理-2000可能会出现负数,将负数改成1就好。

(4)最终格式如下:抽取序列时,都是小数值在前,保存为gff.txt

二、从基因组抽取启动子序列

利用scriptExtract_seq_previ_termi_v4.py,可以根据位置信息提取基因组的相关序列。

经过excel整理后,其实运行代码命令如下:

python2 Extract_seq_previ_termi_v2.py genome.fa gff.txt 0 0
#!/usr/bin/env python
from __future__ import division

print '''
	Usage: python Extract_seq_previ.py  genome.fa  gff  previ_length termi_length
	       gff format:NC_001147.6     159548  160594  -	genename
	       length: bp
'''

import sys,re

IN1=open(sys.argv[1],'r') # genome file
IN2=open(sys.argv[2],'r') # glimmer file format:NC_001147.6	159548	160594	-
kb1=int(sys.argv[3].strip()) # previous N bp
kb2=int(sys.argv[4].strip()) #termi N bp
OUT=open("fa.out",'w')



def Max(i,j):
	if int(i)>=int(j):
		return int(j)
	else:
		return int(i)



def Seqin(fa):
	seq_name=[]
	seqs=[]
	each_seq=""
	for eachline in fa:
		eachline=eachline.rstrip()
		if eachline.startswith(">"):
			seq_name.append(eachline.strip(">"))
			if each_seq:
				seqs.append(each_seq)
				each_seq=""
		else:
			each_seq+=eachline
	seqs.append(each_seq)
	return seq_name,seqs

def SeqConvert(seq):
	Convert={"A":"T","C":"G","T":"A","G":"C","a":"t","t":'a',"c":'g',"g":"c","N":"N","n":"n"}
	return ''.join(map(lambda x: Convert[x],seq))[::-1]

seq_name=[]
seqs=[]
seq=""
seq_name,seqs=Seqin(IN1)

#for i in seq_name:
#	print ">"+i+'\n'+str(len(seq[seq_name.index(i)]))

split=[]

for eachline in IN2:
	split=eachline.rstrip().split('\t')
	try:
		if split[3]=="-":
			seq=seqs[seq_name.index(split[0])][(int(split[1])-Max(int(split[1]),kb2)):(int(split[1])-1)].lower()+seqs[seq_name.index(split[0])][(int(split[1])-1):(int(split[2]))].upper()+seqs[seq_name.index(split[0])][(int(split[2])):(int(split[2])+kb1)].lower()
			seq=SeqConvert(seq)
		else:
			seq=seqs[seq_name.index(split[0])][(int(split[1])-Max(int(split[1]),kb1)):(int(split[1])-1)].lower()+seqs[seq_name.index(split[0])][(int(split[1])-1):(int(split[2]))].upper()+seqs[seq_name.index(split[0])][int(split[2]):(int(split[2])+kb2)].lower()	
		OUT.write(">"+'_'.join([split[4],str(kb1),str(kb2)])+'\n'+seq+'\n')
	except IndexError:
                print "pass"	


IN1.close()
IN2.close()
OUT.close()
		
	

三、从fasta文件,根据ID抽取序列

 只选择其中几个启动子,可以用script extract_fasta_by_id.py根据基因的名称提取启动子序列

(1)准备基因ID_list

注意ID与fasta的分时相同

(2)根据ID_list抽取对应fasta序列

python2 extract_fasta_by_id.py id.txt(需要抽取的Gene名称) genome.fa(序列文件) seq.fa(结果) 
#! /usr/bin/env python
import sys,re

IN1=open(sys.argv[1],'r')
IN2=open(sys.argv[2],'r')
OUT=open(sys.argv[3],'w')

lst=[]
k=0
for eachline in IN1:
	eachline=eachline.rstrip()
	lst.append(eachline)

for eachline in IN2:
	m=re.search("(>(\S+))",eachline)
	if m:
		name=m.group(2)
		if name in lst:
			k=1
			OUT.write("%s%s\n"%(">",m.group(2)))
		else:k=0
	else:
		if k==1:
			
			OUT.write(eachline)
		
	

IN1.close()
IN2.close()
OUT.close()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Biopython和pandas库来解析基因组文件和gff3文件,并提取启动子序列。 首先,需要从基因组文件中读取DNA序列。假设基因组文件是fasta格式,可以使用Biopython中的SeqIO模块读取序列: ```python from Bio import SeqIO genome_file = "genome.fasta" genome_seq = SeqIO.read(genome_file, "fasta").seq ``` 接下来,需要从gff3文件中提取基因信息和其位置。可以使用pandas库读取gff3文件,并筛选出基因信息: ```python import pandas as pd gff_file = "genome.gff3" gff_df = pd.read_csv(gff_file, sep="\t", comment="#", header=None) gff_df.columns = ["seqid", "source", "type", "start", "end", "score", "strand", "phase", "attributes"] gene_df = gff_df[gff_df["type"]=="gene"] ``` 然后,可以根据基因的位置提取启动子序列。假设启动子长度为1000个碱基,可以根据基因的方向,从基因的上游或下游位置提取启动子序列: ```python upstream_len = 1000 promoter_seqs = [] for index, row in gene_df.iterrows(): gene_start = row["start"] gene_end = row["end"] gene_strand = row["strand"] if gene_strand == "+": promoter_start = max(gene_start - upstream_len, 0) promoter_end = gene_start else: promoter_start = gene_end promoter_end = gene_end + upstream_len if promoter_end > len(genome_seq): promoter_end = len(genome_seq) promoter_seq = genome_seq[promoter_start:promoter_end] promoter_seqs.append(promoter_seq) ``` 最后,可以将启动子序列保存到文件中: ```python with open("promoters.fasta", "w") as f: for i, promoter_seq in enumerate(promoter_seqs): f.write(">promoter_{}\n{}\n".format(i+1, promoter_seq)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值