这是小编的第一篇博客,也是一种尝试,主要记录在python应用中遇到的一些小问题,小编平时做的主要是DNA结合蛋白的识别与预测,需要借助多种软件进行特征提取,如PSI——BLAST,PSIpred等等,小编这次要解决的问题就是小编拿到的原始序列数据为一个fasta文件中包含多个序列,但PSIpred是一条一条跑,因此需要将其拆分
首先给大家看一下小编的文件样式: 这是从某位大佬文献中获得的6个数据集,小编想要通过python编程生成6个对应的文件夹: 每个文件夹中包括对应数据集中所有单条蛋白质序列文件,嗯。。。好像有点说不太明白,那就放图吧,以New_D31.fasta为例,这个文件中包含31条蛋白质序列: 可以看到每三行代表一条蛋白质序列,小编就是想把这每三行放到一个新的以该蛋白质名称命名的fasta文件中,最后的结果应该是这样的: 这个是打开文件夹New_D31之后的效果,里面有31个fasta文件,每个fasta文件是这样的:(还是以第一个为例) 差不多就是这个意思了,不知道大家明白了没有,下面就给大家放上小编的代码吧!
代码如下(示例):
import os #确定操作目录,数据集所在的目录,以及想要创建的新的文件夹所在的目录 path = 'H:/硕士研究/binding-site/论文资料/数据集收集整理/数据集(用)/' #读取该目录下文件名称、数目,并以此构造新的文件夹名称file_name,原始的.fasta文件名称读入到filename中 file_name = [] filename = [] for dirpath, dirnames, filenames in os.walk(path): file_count = 0 for file in filenames: file_name.append(filenames[file_count].strip('.fasta')) filename.append(filenames[file_count]) file_count += 1 #创建新的文件夹,文件夹名称对应.fasta文件名称 #首先判断是否存在以该名称为名的文件 for i in range(file_count): isExists = os.path.exists(path+file_name[i]+'/') if not isExists: os.makedirs(path+file_name[i])#构造path目录下,名称为file_name的文件夹 f = open(path+filename[i],'r')#打开同名的.fasta文件进行蛋白质序列拆分 data = f.readlines() #计算序列数目,并将序列名字存入seq_name中 seq_count = 0#蛋白质序列总数目计数 seq_name = []#存放所有蛋白质序列的名称 seq_line = []#存放蛋白质序列所在行的位置信息 for line in range(1,len(data)): if data[line].startswith('>'): seq_line.append(line) seq_count += 1 seq_name.append(data[line]) for j in range(seq_count): #构造新的以蛋白质序列名称为名的.fasta文件,其中path为路径,file_name为对应该数据集下的蛋白质序列存放位置,seq_name为序列名字,后面为文件格式,“a”表示如果没有这个名字的文件,创建新的 fnew = open(path+file_name[i]+'/'+seq_name[j].strip().strip('>')+'.fasta',"a") lists = data[seq_line[j]:seq_line[j]+3]#按照上一个循环中seq_line进行对应名称下蛋白质序列相关信息的索引,并将其写入.fasta文件中 fnew.writelines(lists)#写入文件中,这里是按照list写入的 fnew.close() continue好啦,这就是小编今天想要分享的全部内容啦,作为一个编程小白,小编可能编写的内容还有很多需要提升更改的地方,希望各位大佬多多指点,也希望大佬可以分享更简单的方法,多多沟通交流。 注:上面所附的图都是小编自己的哦