上一篇介绍了4种靶基因预测软件的安装,那么在正式使用前,需要进行数据的准备,以满足软件使用的格式要求,本文将详细介绍本人在数据准备过程中遇到的麻烦,尤其是targetscan数据的转换,并分享解决方法。
1、miRNA序列fasta文件准备
miRNA名称与序列存在一个csv表格文件中,怎么变成fasta格式呢?
![](https://i-blog.csdnimg.cn/blog_migrate/ccd89fef46ceb02818937d063086276b.png)
还是那句话!人生苦短,我学python!
# 导入csv模块,没安装的需要先安装
import csv
with open('D:\\用户\\桌面\\test.csv') as f:
r = csv.reader(f)
for row in r:
print(row)
# row是一个列表,将每一个列表都拼接成一行,即为一个miRNA的fasta格式
line = '>' + row[0] + '\n' + row[1] + '\n'
# 逐行保存
with open('D:\\用户\\桌面\\test.txt', 'a') as r:
r.writelines(line)
![](https://i-blog.csdnimg.cn/blog_migrate/17b401d2874685775f3c4d3857c8de65.png)
手动删除前两行就得到我们所需的fasta格式文件了!
2、mRNA序列fasta文件准备
1)合并多个mRNA序列文件
测试的mRNA序列存在多个fasta文件中,打开一个文件,序列信息分布在多行中。
![](https://i-blog.csdnimg.cn/blog_migrate/58d9ce39a11f602cae208fbb6b605e91.png)
我希望将所有的fasta文件合并在同一个文件中,并且每一条序列仅占用一行(原因后面讲)。
# 导入os模块
import os
# 获取目标文件夹的路径
path = 'D:\\用户\\桌面\\test'
# 获取当前文件夹中的文件名称列表
filenames = os.listdir(path)
# 逐个获取文件路径,并处理
for filename in filenames:
filepath = path + '\\' + filename
# 读取单个文件,并逐行处理
with open(filepath) as f:
for line in f:
# 去除每行左右空白
line = line.strip()
# 去除空白行
if len(line) == 0:
continue
# 合并序列为一行
line = line.replace('\n', '').replace('>', '\n>')
if line.startswith('\n>'):
# 去除多余信息,仅保留gene_id
line = line.split(' ')[0] + '\n'
# 保存
with open('D:\\用户\\桌面\\mRNA_16.txt', 'a') as r:
r.writelines(line)
![](https://i-blog.csdnimg.cn/blog_migrate/7c927dd43d8eb47afef612fc92079cba.png)
可以看到每一个gene_id占一行,没有了其他的介绍信息,并且每一条序列也仅占一行(序列太长,看起来像是有多行,实际上是一行),记得手动删除第一个空白行。
2)总转录本mRNA序列去冗余
前面有提到将每一条序列放到一行中,原因有两个:一是因为序列放在多行,意味着需要更多行来存储序列,总转录本文件较大,所以每次打开都很慢,将每条序列放在一行,节省了大量空间,打开就非常快,并且猜测在靶基因预测时,运行速度同样可以变快;二是为了后面方便转换成targetscan软件运行的格式。
![](https://i-blog.csdnimg.cn/blog_migrate/9f8bd425e67271f5782e8e79a04b0e7e.png)
with open(r'D:\用户\桌面\total_reverse_CDS201703.fa', encoding='gbk') as fastas:
for line in fastas:
line = line.strip()
if len(line) == 0:
continue
line = line.replace('\n', '').replace('>', '\n>')
if line.startswith('\n>'):
line = line.replace('gene=','') + '\n'
with open(r"D:\用户\桌面\total_reverse_CDS201703.txt", 'a') as f:
f.writelines(line)
![](https://i-blog.csdnimg.cn/blog_migrate/fdec8b5c641af25835434915117ccf98.png)
秒开的速度!
记得手动删除第一个空白行。
3、targetscan数据准备
1)miRNA输入格式
targetscan要求的miRNA数据格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/be123e25e0a2bbf6f9bbc630af7ab6a6.png)
将fasta格式转换成目标数据格式。
with open(r'D:\用户\桌面\test.txt') as f:
for line in f:
line = line.strip()
if len(line) == 0:
continue
line = line.replace('\n', '').replace('>', '\n>')
if line.startswith('\n>'):
line = line.replace('>','') + '\t'
else:
line = line[1:8] + '\t' + '10010'
with open(r'D:\用户\桌面\test_targetscan.txt','a') as r:
r.writelines(line)
![](https://i-blog.csdnimg.cn/blog_migrate/855de2486ad8d6d7e1bc02f6108ca4af.png)
老规矩,手动删除第一行!
2)mRNA输入格式
![](https://i-blog.csdnimg.cn/blog_migrate/0278713fbc1eb6669ab38ff1d2104dc0.png)
with open(r'D:\用户\桌面\total_reverse_CDS201703.txt') as f:
for line in f:
line = line.strip()
if len(line) == 0:
continue
line = line.replace('\n', '').replace('>', '\n>')
if line.startswith('\n>'):
line = line.replace('>','') + '\t' + '10010' + '\t'
with open(r'D:\用户\桌面\total_reverse_CDS201703_targetscan.txt','a') as r:
r.writelines(line)
![](https://i-blog.csdnimg.cn/blog_migrate/c7b85801aa5bf1301268611a15ec8c27.png)
手动删除第一行!