美文网首页Linux与生物信息
过滤序列比对长度较短的文件

过滤序列比对长度较短的文件

作者: 徐诗芬 | 来源:发表于2022-03-16 16:40 被阅读0次

一个很有意思的小脚本,现在写脚本的思路越来越偏向高效化了。
两个小技巧:1. 这里用python写文件的话运行速度会慢很多,因此用subprocess调用shell脚本会更快。2. 使用了yield,它是一个迭代器,相当于读取一个然后处理一个。不用return,因为return相当于需要全部遍历完文件再进入循环,会慢很多。

#!/usr/bin/python
# -*- coding: utf-8 -*-
# conda activate python3
"""
    作者:徐诗芬
    内容:过滤一系列.mafft.pep.fa文件中序列比对长度低于50的文件,
    先读取判断文件序列长度,再用subprocess进行拷贝文件,因此只适用于Linux系统而不适用于window!
    日期:2022.3.12
"""
import os
import sys
import subprocess

def file_extract(path):
    # 提取基因蛋白序列文件,生成一个文件路径列表
    # file_list = []
    for root, dirs, files in os.walk(path):
        for f in files:
            file = os.path.join(root, f)
            yield file

def fasta_len(inf):
    # 按行读取序列
    # 输入fasta文件,返回名称,序列
    with open(inf) as f:
        global name
        dict = {}
        for line in f:
            line = line.strip()
            if line.startswith('>'):
                name = line
                dict[name] = ''
                i = 0
            else:
                dict[name] += line
                i += len(dict[name])
        return i

def main():
    inpath = sys.argv[1]
    outpath1 = sys.argv[2]   # 文件没有用的,<50个氨基酸的序列
    outpath2 = sys.argv[3]   # 文件有用的,≥50个氨基酸的序列
    subprocess.call(['mkdir', outpath1])
    subprocess.call(['mkdir', outpath2])
    for file in file_extract(inpath):
        if fasta_len(file) < 50:
            subprocess.call(['cp', file, outpath1])
        else:
            subprocess.call(['cp', file, outpath2])

try:
    main()
except IndexError:
    usage()

相关文章

  • 过滤序列比对长度较短的文件

    一个很有意思的小脚本,现在写脚本的思路越来越偏向高效化了。两个小技巧:1. 这里用python写文件的话运行速度会...

  • 在linux中构建基因进化树

    首先利用muscle进行多序列比对:“muscle -in 序列文件.fasta -out 输出的比对结果文件.f...

  • TBtools基因家族分析详细教程(3)基因家族成员的进化分析1

    新建文件夹进化分析1 包括1多序列比对与可视化Mega(Muscle)进行序列比对,JalView进行多序列比对结...

  • 基础知识复习之比对

    刘小泽写于18.11.30一般我们得到原始数据、质控过滤后,要么进行比对,要么序列拼接。序列比对的话可以选择参考基...

  • 用Python和C语言实现DNA双序列简单比对

    这是DNA双序列比对类型中最简单的一种,要求输入的两条序列长度相同,通过运行代码给出两条序列的比对得分 Pytho...

  • 2020-09-03 Papara 安装

    这个工具可以将短的read比对到已经比对好的长序列比对文件,并且在比对的时候考虑长序列的phylogeny的信息 ...

  • 基因组分析 K-mer 第3回 估计1000bp的全基因长度

    0608 Cloudy在第二回的文章里我们用k-mer法预测了比较短的序列长度。因为序列本身较短,再加上是预测上的...

  • samtools

    序列比对:将测序reads与已知序列信息的基因或基因组进行比对,比对结果格式比较常见的是sam和bam文件。sam...

  • CHIP-Seq(3):比对及质控

    1.对过滤后的fq.gz文件进行比对,并查看比对情况 2.比对后将SAM文件转为bam文件,转之前要进行排序,可以...

  • 2021-01-17

    能实现同时用mate和特征序列过滤,需要更严格的过滤,同时对分三段比对上的circRNA警惕。 发现:twopai...

网友评论

    本文标题:过滤序列比对长度较短的文件

    本文链接:https://www.haomeiwen.com/subject/advpdrtx.html