序列拆分及批量归类至文件夹(v1)
拿到一堆线粒体rna的coI序列,由于全部序列都放在一个txt文件里面,因为后期需要把每一个序列单独拿出来fas文件,然后根据一个表格分类到种。要手动复制粘贴不知道要花多久,所以就用python自动化一下。
v1
整个过程分三步
1.拆分为以缩写命名的单个文件
#split into single seq
import os
import pandas as pd
from tst import bad_val
file_path=os.path.abspath(r"E:\新建文件夹\新建文件夹")
df_E2a = pd.read_excel("E2a.xlsx")
df_ce2e = pd.read_excel("E:\pythonProject1\CE2E.xlsx")
df_E2a.index = df_E2a['ab.']
a = ">"
f=open(r'E:\新建文件夹\新建文件夹\COI(1).fas')
for line in f:
if line.startswith(">"):
new=line.lstrip('>').strip('\n')
if new in bad_val:
full = 'Not found!'+ new
else:
full = df_E2a.name[df_E2a['ab.'].loc[new]]
outfile = open("E:\新建文件夹\新建文件夹\db\\"+"%s"%new + '.' + 'fas',"w")
outfile.write(line+next(f))
outfile.close()
print("Finished")
2.将同一物种的序列归类,放入以物种命名的文件夹
classify
import os # os是用来切换路径和创建文件夹的。
import pandas as pd
from tst import bad_val
from shutil import copy # shutil 是用来复制黏贴文件的
df_E2a = pd.read_excel("E2a.xlsx")
df_E2a.index = df_E2a['ab.']
file_path = r'E:\新建文件夹\新建文件夹\db' # 想拆分的文件夹所在路径,也就是一大堆文件所在的路径
save_dir = r'E:\新建文件夹\新建文件夹\class' # save_dir 是想把复制出来的文件存放在的路径
获取 file_path 下的文件和文件夹列表
因为 file_path 里面没有文件夹,所以不处理有文件夹的情况
pathDir = os.listdir(file_path) # os.listdir(file_path) 是获取指定路径下包含的文件或文件夹列表
for filename in pathDir: # 遍历pathDir下的所有文件filename
file_name = filename.split('.')[0]
if file_name in bad_val:
full = '!Not found!'
else:
full = df_E2a.name[df_E2a['ab.'].loc[file_name]]
dir_name = full.strip() # 新的文件夹的命名
from_path = os.path.join(file_path, filename) # 旧文件的绝对路径(包含文件的后缀名)
to_path = save_dir + "\\" + dir_name # 新文件的绝对路径
if not os.path.isdir(to_path): # 如果 to_path 目录不存在,则创建
os.makedirs(to_path)
copy(from_path, to_path) # 完成复制黏贴
3.发现txt文件中的缩写与物种名表格的缩写部分不相同,暂时处理:找出无法匹配的缩写单独放入一个文件夹,人工处理
#find the unmatched value
import pandas as pd
import difflib
bad_val = []
df_E2a = pd.read_excel("E2a.xlsx")
f=open(r'E:\新建文件夹\新建文件夹\COI(1).fas')
for line in f:
if line.startswith(">"):
new=line.lstrip('>').strip('\n')
a=difflib.get_close_matches(new,df_E2a['ab.'],1, cutoff=1)
if len(a)==0:
bad_val.append(new)