Linux下Python多进程输出MSA-生物信息学

Python学习日志-Linux下Python多进程输出MSA-生物信息学

# -*- coding: utf-8 -*-
"""
Created on  Jan 4 14:37 2020
@author: Xue-Qiang
"""
import os, re
import time
import gc
import subprocess
from multiprocessing import Pool


def msa_batch_generate(inputfile):
    os.mkdir('msa_file')
    with open(inputfile, 'r+') as f:
        lines = f.readlines()
        for i in range(len(lines)):
            line = lines[i].strip()
            assert line != ''
            if '>' in line:
                file_name = re.sub('>', '', line)
                os.chdir('msa_file')
                os.mkdir(file_name)
                line = line.split('-')
                line[1] = '>' + line[1]
                msa1_name = re.sub('>', '', line[0])
                msa2_name = re.sub('>', '', line[1])
                os.chdir(file_name)
                with open(msa1_name, 'w+') as file1:
                    file1.write(line[0] + '\n' + lines[i + 1].strip())
                with open(msa2_name, 'w+') as file2:
                    file2.write(line[1] + '\n' + lines[i + 2].strip())
                os.chdir(os.path.join(os.getcwd(), "../.."))
                del line, msa1_name, msa2_name
                gc.collect()
        del lines
        gc.collect()


def hhblits(fasta_file):
    subprocess.Popen(
        '/data0/hujun_stu/software/HHsuite/hhsuite-3.0-beta.3-Linux/bin/hhblits -i ' + fasta_file + ' -d /data0/hujun_stu/uniprot20_2016_02/uniprot20_2016_02 -n 3 -id 99 -e 0.001 -cov 50 -oa3m ' + fasta_file + '.a3m'
        , stdout=subprocess.PIPE, shell=True)


if __name__ == "__main__":
    start = time.time()
    msa_batch_generate(r'test.txt')
    pool = Pool(6)
    for root, dirs, files in os.walk('msa_file'):
        for file in files:
            path = os.path.join(root, file)
            pool.apply_async(hhblits, args=(path,))
    pool.close()
    pool.join()
    print(time.time() - start)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值