用BEDtools/Python序列截取

在用MEME-chip进行模体搜索时,需要将fasta格式的文件上传,而上传的数据又必须是大于50bp且等长的序列,这个时候就要对数据进行序列截取。此处将介绍两种截取序列的方法。

一、BEDtools截取序列

Bedtools是一款可以对genomic features进行比较、相关操作和注释的工具,目前版本已经有三十多个工具/命令用以实现各种不同的功能,可以针对bed、vcf、gff等格式的文件进行处理。

BEDtools的官方主页地址为https://bedtools.readthedocs.io/en/latest/content/bedtools-suite.html
在bedtools中众多功能中,getfasta可截取序列并获得fasta文件。

getfasta

进行序列截取时应该已经有了全基因组序列数据和peak数据,首先用excle表格对数据进行初步处理,以Aoaf细胞系结合CTCF的peak数据为例
数据示例

若想要截取包含peak,100bp长的序列,首先用公式取start和end的中点=ROUND(AVERAGE(start1,end1),0)
取中点

然后再分别计算中点减50和中点加五十,这样我们就得到了100bp区间的包含peak的数据
100bp区间
然后我们将A,L,M列保存为一个新的bed文件。接下来我们打开bedtools开始序列截取。
首先将24条染色体的序列信息下载好,然后使用命令

bedtools getfasta -fi /usr/chailu/2020job/motif_discovery/jiyinzu/chr1.fa  -bed /usr/chailu/2020job/motif_discovery/shuru/Gm12892.bed  -fo /usr/chailu/2020job/motif_discovery/shuchu/1.fa

以上命令只截取了chr1的,全部截取需要更改文件名字进行下一次截取。
bedtools getfasta意思是使用bedtools下getfasta功能。
-fi意思是输入的染色体序列信息的文件,后面跟着的是文件的位置信息。
-bed意思是输入的bed文件,跟着的是文件位置信息。
-fo意思是输出文件所在位置及对输出文件命名。

最终我们会得到24个fasta文件分别对应各个染色体的截取结果,最终我们用一个简单的python程序将这些文件合并,得到总的fasta文件,将这个文件上传到MEME-chip上就可以进行接下来的模体搜索啦。

二、Python程序截取序列

考虑到有时候Linux系统的复杂性,或者有时候服务器不好使了,我们的备选就是人生苦短的Python啦,前提也是首先得有全基因组序列信息,和peak文件,对peak文件进行处理同上,命名为end.txt


end.txt

然后用以下python程序进行序列截取

fp=open(r'F:\2020myjob\jiyinzu\shuru\end.txt','rt') #位置信息文件
ff=open(r'F:\2020myjob\jiyinzu\chr1.fa','rt')  #多行变一行后的序列文件导入
fw=open(r'F:\2020myjob\jiyinzu\shuchu/1.txt','wt')   #改对应染色体名字,输出文件,result
line_fasta=ff.readlines()
line_position=fp.readlines()
seq=[]
sequence=''
for line_a in line_fasta:
    line_a=line_a.strip().replace('|',' ')
    seq.append(line_a)
sequence=sequence.join(seq)

result=[]
for line in line_position:
    line = line.strip().split('\t')
    if 'chr1' in line:     #染色体条数
        start=line[1]#待截取序列起始位点
        end=line[2]#待截取序列终止位点
        fragment=sequence[int(start):int(end)]
        print(fragment,'\t',file=fw)

fp.close()
ff.close()
fw.close()

print('yeah')

最终我们会得到截取出来的序列seq信息,但是并不是fasta格式的文件,首先我们将这24个序列文件进行合并,合并文件的python程序为

import os
#获取目标文件夹的路径
os.getcwd()
os.chdir('F:\\2020myjob\\jiyinzu')
meragefiledir = os.getcwd()+'\\shuchu'
#获取当前文件夹中的文件名称列表
filenames=os.listdir(meragefiledir)
file=open('Hmf.txt','w')
#先遍历文件名
for filename in filenames:
    filepath=meragefiledir+'\\'+filename
    #遍历单个文件,读取行数
    for line in open(filepath):
        file.writelines(line)
    file.write('\n') 
file.close()

这个程序运行完之后会产生空行,接下来再用去除空行程序来将中间的空行去除

def delblankline(infile, outfile):
 infopen = open(infile, 'r',encoding="utf-8")
 outfopen = open(outfile, 'w',encoding="utf-8")
 
 lines = infopen.readlines()
 for line in lines:
  if line.split():
   outfopen.writelines(line)
  else:
   outfopen.writelines("")
 
 infopen.close()
 outfopen.close()
 
delblankline("Hmf.txt", "Hmf_seq.txt")#Hmf.txt是没去空行前的文件,Hmf_seq.txt是去除空行后的文件

此处我们已经得到了截取出来的序列信息,接下来我们再用excle对之前的end.txt再进行一次处理输入公式=A1&":"&B1&"-"&C1来得到编号文件。


A.txt

将D列再保存为一个txt文件,命名为A.txt,此时我们就可用seq序列文件和编号文件A.txt,生成一个fasta格式的文件,同样用python程序来达到这个目的

import os
os.getcwd()
os.chdir('F:\\')
f_ = open('F:/Hee_seq.txt','r')#序列文件
n=0
list1=[]
for i in f_.readlines():
    n+=1
    s=i.strip()
    list1.append(s)
f_.close()
 
ff_ = open('F:/A.txt','r')#编号文件
m=0
list2=[]
for i in ff_.readlines():
    m+=1
    s=i.strip()
    list2.append(s)
ff_.close()
 
fff_=open('F:/Hee.fa','w')
for i in range(n):
    s='>' + list2[i]+'\n'+list1[i]
    fff_.write(s+'\n')
    #print(s)
fff_.close()    
print('OK!')

得到的fasta文件就可以进行模体搜索了。

Tips:切记对初始的peak排序把染色体排序成按顺序1-22,X,Y,因为
Python内置的排序方式为1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,3,4,5,6,7,8,9,X,Y,所以合并文件的时候如果你的命名是数字的话就肯定会是这样的排序,合成fasta格式文件的时候就会产生编号和序列并不匹配的错误,若要避免这个情况的发生,可以在对输出文件命名时以字母开头,按abcd···的顺序输出,或者不对peak文件排序就可避免这个错误啦。

注:文中所有python程序均来自网络或师姐的编辑

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352