之前用c写过一个程序,查找reads中是否包含了adaptor,如果检测到的话就过滤掉含有adaptor的reads,这次在过滤完数据之后发现接头序列比较多,为了提升组装效果,又不能很大地影响数据量,需要对接头进行截断处理,并过滤过短的reads,用python写了一个简短的程序,指定超过3个错配以内的匹配都认为匹配到,并且长度小于50bp的reads过滤,在以下程序基础上添加传入参数,可以适用比较多的情况(单端、双端、含有single等):

 import sys
import re
from Bio import SeqIO def rmPE(read1,read2,adaptor1,adaptor2,min_length):
res_1 = rmSE(read1,adaptor1,min_length)
res_2 = rmSE(read2,adaptor2,min_length)
if res_1 and res_2:
return res_1,res_2
else:
return False def rmSE(read,adaptor,min_length):
seq = read.seq
seed_len = 6
a_len = len(adaptor)
seq_len = len(seq)
for i in range(a_len - seed_len):
seed = adaptor[i:i+seed_len]
pos = 0
while(pos < seq_len):
find_pos = seq.find(seed,pos)
if find_pos > 0:
mistaken_count = 0
_b = find_pos
_e = find_pos + seed_len
while(_b >= 0 and i >= find_pos - _b):
if adaptor[i - find_pos + _b] != seq[_b]:
mistaken_count += 1
if mistaken_count > 3:
break
_b -= 1
else :
while(_e < seq_len and i - find_pos + _e < a_len):
if adaptor[ i - find_pos + _e ] != seq[_e]:
mistaken_count += 1
if mistaken_count > 3:
break
_e += 1
else:
if find_pos - i > min_length:
return read[:find_pos-i]
else :
return False
pos = find_pos + 1
else:
break
return read def rmAdaptor(argv):
argv.pop(0)
type = argv.pop(0)
if type=='PE':
read1_file,read2_file,adaptor1,adaptor2,out_prefix,min_length = argv
read2_records = SeqIO.parse(open(read2_file),'fastq')
read1_out = open( '%s.1.fq'%out_prefix,'w' )
read2_out = open( '%s.2.fq'%out_prefix,'w' )
for read1 in SeqIO.parse(open(read1_file),'fastq'):
read2 = read2_records.next()
rmPE_res = rmPE(read1,read2,adaptor1,adaptor2,min_length)
if rmPE_res:
read1_out.write(rmPE_res[0].format('fastq'))
read2_out.write(rmPE_res[1].format('fastq'))
elif type=='SE':
reads_file,adaptor,out_prefix,min_length = argv
reads_out = open( '%s.single.fq'%out_prefix,'w' )
for reads in SeqIO.parse(open(reads_file),'fastq'):
rmSE_res = False
if re.search('[\s\/](\d)',reads.id).group(1) == '':
rmSE_res = rmSE(reads,adaptor1,min_length)
elif re.search('[\s\/](\d)',reads.id).group(1) == '':
rmSE_res = rmSE(reads,adaptor2,min_length)
if rmSE_res:
reads_out.write(rmSE_res.format('fastq')) if __name__ == '__main__':
rmAdaptor(sys.argv)

去除测序reads中的接头:adaptor的更多相关文章

  1. fastx_toolkit去除测序数据中的接头和低质量的reads

    高通量测序数据下机后得到了fastq的raw_data,通常测序公司在将数据返还给客户之前会做"clean"处理,即得到clean_data.然而,这些clean_data是否真的 ...

  2. RNAseq测序reads定位

    RNAseq测序reads定位 发表评论 3,210 A+ 所属分类:Transcriptomics   收  藏 获得RNA-seq的原始数据后,首先需要将所有测序读段通过序列映射(mapping) ...

  3. java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。

    import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object o ...

  4. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  5. 去除List列表中反复值(稍作调整,也适合于List&lt;T&gt; 和 List&lt;?&gt;)

    方法一 循环元素删除 [c-sharp] view plaincopy public static void removeDuplicate(List list) { for ( int i = 0  ...

  6. Java 去除 ArrayList 集合中的重复元素

    // One practice package Collection; import java.util.ArrayList; import java.util.Iterator; // 去除 Arr ...

  7. 去除vue项目中的#及其ie9兼容性

    一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...

  8. 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...

  9. 正则去除html字符串中的注释、标签、属性

    var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...

随机推荐

  1. mysql left join 几个意思

    left join 用于多表  >1个表比如select a.*,b.* from ta as a left join tb as b on a.aid=b.bid咱们就以实际的代码来查看一下. ...

  2. 鼠标悬停,图片放大 CSS实现

    因为最近做的项目刚好用到了这个实现,分享出来   class=enlarge 为div标签的class div img 为标签 .enlarge div img:hover{ transform: s ...

  3. HTML,CSS学习笔记

    <p>元素,代表是一个段落,单独另起一行</p> <h1>的意思就是主标题</h1> <h1><h2><h3>... ...

  4. A. Arrays(Codeforces Round #317 水题)

    A. Arrays time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  5. 01_GIT基础、安装

     1 为什么选择GIT 分布式,强调个体 公共server压力和数据量都不会太大 速度快.灵活 随意两个开发人员之间能够非常easy的解决冲突 离线工作 每日工作备份 能够吃懊悔药 2  GIT基 ...

  6. SharePoint 集成OWA概述

    简介 OWA服务,也就是Office Web Application,微软提供的可以在线查看和编辑Office系列文档的服务,包括Word/Excel/PPT/OneNote.我们可以通过OWA服务和 ...

  7. MVC Anti-XSS方案

    1:Form提交模式 在使用Form提交时,MVC框架提供了一个默认的机制.如果数据中含有恶意字,则会自动转向出错页面.   2:Ajax+JSON提交模式. MVC框架未提供对于Json数据的Ant ...

  8. .NET Core RSA 签名和验签(密钥为 16 进制编码)

    使用 OpenSSL 生成公私钥对,命令: $ openssl genrsa -out rsa_1024_priv.pem $ openssl pkcs8 -topk8 -inform PEM -in ...

  9. 6.python内置函数

    1. abs() 获取绝对值 >>> abs(-10) 10 >>> a = -10 >>> a.__abs__() 10 2. all()   ...

  10. Linux简介,虚拟机安装,网络设置,桌面和vim安装

    Linux简介: linux代表系统内核.Linux系统指基于Linux内核的操作系统,由内核和程序结合组成.比较流行的发行版本由RedHat Linux.Fedora.Centos.Debian.U ...