今天還是在做張阿姨的項(xiàng)目,還是那100多個(gè)菌,她說(shuō)要blast一下抗性基因关筒,那就比咯,最出名與權(quán)威的的細(xì)菌抗性基因庫(kù)自然肯定是resfinder了杯缺。
for i in $(cat list); do echo i; mkdir ${i}_re; python resfinder.py -i ${i}_new.fa -o ${i}_re -p resfinder -t 0.95 -l 0.90 > ${i}_out; done
寫個(gè)循環(huán)蒸播,刷刷弄完真開(kāi)心。
問(wèn)題來(lái)了!
生成的json結(jié)果的命名全是一樣的袍榆!都是data_resfinder.json
只有生成的目錄文件名不一樣胀屿,噢不。怎么辦包雀。
機(jī)智的我們來(lái)看看resfinder的py腳本宿崭。噢一千多行,放棄才写!好吧其實(shí)我還是找到了他的輸出指令葡兑。想想算了我要做矩陣它json我還是要處理的。一步到位吧赞草,直接用我們">"出來(lái)的result文件處理好了讹堤!
我們來(lái)看看輸出的result是什么樣子的:
前面一千多行的廢話。要的只是這幾個(gè)字符
那就easy了沾凄!
#resfinder轉(zhuǎn)csv
import os
from collections import OrderedDict
import csv
forall = OrderedDict()
yourdir = "C:/Users/Administrator/Desktop/output/"#input("dir:")#輸入文件夾名字
mylist = os.listdir(yourdir)#批量讀取文件名
首先先讀讀包梗醇,引入一下文件。
然后創(chuàng)建一個(gè)篩選器撒蟀。
#提取函數(shù)
def select(file):
for c in file.readlines():
#c = c.strip()
if len(c) > 70:
if c.find("No hit found") == -1:
if c.find("run_info") == -1:
if c[70] != " ":
c = c.strip()
c = c.replace("{","")
c = c.replace("'","")
c = c.replace('"',"")
temp = c.find("HSP_length")
c = c[:temp-2]
c = c.split()
last = c[-1]
forall[i].append(last)
再要一個(gè)判斷器判斷該耐藥基因在該個(gè)體中是否存在叙谨,超簡(jiǎn)單!
#判斷存在函數(shù)
def exist():
for k in forall[i]:
if j == k:
temp = 1
break
else:temp = 0
return temp
最后主程序以及寫到csv中保屯。
for i in mylist:
file=open(yourdir+i,'r')
forall[i] =[]
select(file)
#print(forall)
file.close()
forall_name = []
for i in forall.keys():
forall_name.append(i)
outgo = forall[forall_name[0]]
for j in range(len(forall_name)):
outgo = list(set(outgo).union(forall[forall_name[j]]))
#print(outgo)
outmat = OrderedDict()
data = []
for i in forall.keys():
outmat[i] = []
for j in outgo:
ex = exist()
outmat[i].append(ex)
outmat[i].append(i)
data.append(outmat[i])
##print(data)
with open('test.csv', 'w', newline='') as t_file:
csv_writer = csv.writer(t_file)
csv_writer.writerow(outgo)
for l in data:
csv_writer.writerow(l)
生成矩陣用EXCEL打開(kāi)如下嘿嘿嘿唉俗,又可以畫(huà)圖了嘿嘿嘿。
好吧原本剛開(kāi)始是想引入json進(jìn)行處理的配椭,但后來(lái)發(fā)現(xiàn)好像又不是標(biāo)準(zhǔn)的json格式虫溜,咱手動(dòng)搞吧,看需求嘛股缸。
畢竟我大杰尼龜都說(shuō)好衡楞。
resfinder教程(http://www.reibang.com/p/136e56b16a5a)