Linux下实现 psi

编程入门 行业动态 更新时间:2024-10-27 15:19:00

<a href=https://www.elefans.com/category/jswz/34/1770067.html style=Linux下实现 psi"/>

Linux下实现 psi

0. 说明:

在 Linux 通过 Python 的多进程模块实现 psi-blast 的并行,批量生成 pssm 文件。

1. 代码:

import subprocess
import multiprocessing
import time
import osdef runPsiBlast(args):queryFile, dbFile, outFile = args[0], args[1], args[2]cmd = f"./psiblast -query {queryFile} -db {dbFile} -out_ascii_pssm {outFile} -num_iterations 3 -evalue 0.001"subprocess.run(cmd, shell=True)def main(queryPath, outPath, dbFile, cpu):"""queryPath: query fasta文件所在的绝对路径;outPath: 生成的 pssm 文件所在的绝对路径;dbFile: 库文件(需要绝对路径);cpu: 并行所需的 cpu 数目;"""queryFileList = [x.split(".")[0] for x in os.listdir(queryPath) if x.endswith(".fasta")] ## 全部的目标fasta文件alreadyFileList = [x.split(".")[0] for x in os.listdir(outPath) if x.endswith(".pssm")] ## 输出目录中已经存在的pssm结果文件(主要是如果程序中止,后续可以接着将没有pssm结果的fasta继续进行psiblast比对,不需要全部重新运行)needFileList = list(set(queryFileList) - set(alreadyFileList))print("全部的fasta文件的总数: %s\t已经有pssm结果的文件数目: %s\t还需要生成pssm的fasta文件的数目: %s" % (len(queryFileList), len(alreadyFileList), len(needFileList))) ## 全部的,已完成的,未完成的needFileList.sort()queryFastaList = [queryPath+x+".fasta" for x in needFileList]outPSSMList = [outPath+x+".pssm" for x in needFileList]dbFileList = [dbFile,]*len(queryFastaList)## 多进程pool = multiprocessing.Pool(processes=int(cpu))pool.map(runPsiBlast, list(zip(queryFastaList, dbFileList, outPSSMList)))pool.close()pool.join()if __name__ == "__main__":print("开始时间: ",time.ctime())queryPath = "/home/zzy/QueryFastaFiles/" ## fasta 文件所在目录outPath = "/home/zzy/ResPSSMFiles/" ## 输出的 pssm 文件所在目录dbFile = "/home/zzy/Uniref90/uniref90.fasta" ## 库文件所在目录main(queryPath=queryPath,outPath=outPath,dbFile=dbFile,cpu=4) ## 默认4个cpuprint("结束时间: ",time.ctime())

更多推荐

Linux下实现 psi

本文发布于:2023-12-03 08:43:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1653347.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Linux   psi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!