Python初体验
今天开始所有的工作脚本全都从perl转变到python,开发速度明显降低了不少,相信以后随着熟练度提升会好起来。贴一下今天一个工作代码,由于之前去一家小公司测序时,序列长度竟然都没有达到要求,为了之后的索赔事宜,写了个脚本统计所有序列的结果,主要包括总的reads数,bases数,和达到测序策略要求长度的reads数(双端),bases数,高质量(Q30)bases数,高质量reads数(双端)等等......多个文件的统计工作一般会写一个单独处理一个文件的脚本,然后再写一个脚本用来生成多个文件的处理的shell脚本,然后想办法并行处理这个shell就可以,效率会快很多。由于测序数据往往比较大,IO操作时,逐行读取是上策。
统计单个文件测序数据情况脚本:
from __future__ import division
from Bio import SeqIO as fq
import os
import sys
import re
read1_gzfile = sys.argv[1]
read2_gzfile = sys.argv[2]
gz_handle1 = os.popen( 'gunzip -cd %s' % read1_gzfile )
gz_handle2 = os.popen( 'gunzip -cd %s' % read2_gzfile )
basename1 = os.path.basename(read1_gzfile)
basename1 = re.match('(\S+)_R1_001\.fastq\.gz',basename1).group(1)
basename2 = os.path.basename(read2_gzfile)
basename2 = re.match('(\S+)_R2_001\.fastq\.gz',basename2).group(1)
if basename1 != basename2:
raise 'Two Read are not mapped!'
cwd = os.getcwd()
out_handle = open('%s/%s.stat'%(cwd,basename1),'w')
out_handle.write('AllReadsNum\tRead1_PE300_ReadsNum\tRead2_PE300_ReadsNum\tUseful_ReadsNum(Read1>=300 and Read2>=300)\tAll_Bases\tRead1_Q30_Bases(PE300)\tRead2_Q30_Bases(PE300)\tQ30_PE_Reads(Q30>50%)\tUseful_Bases(All)\tUseful_Ratio\n') AllReadsNum = 0
AllBases = 0
Read1_PE300_ReadsNum = 0
Read2_PE300_ReadsNum = 0
Useful_ReadsNum = 0
Read1_Q30_Bases = 0
Read2_Q30_Bases = 0
Q30_PE_Reads = 0
Useful_Bases = 0 def PE300(seq):
if len(seq) >= 300:
return True
else:
return False def Q30(qual_list):
num = 0
for qual in qual_list:
if qual >= 30:
num += 1
return num reads2 = fq.parse(gz_handle2,'fastq')
for read1 in fq.parse(gz_handle1,'fastq'):
read2 = reads2.next()
seq1 = read1.seq
qual1 = read1.letter_annotations['phred_quality']
seq2 = read2.seq
qual2 = read2.letter_annotations['phred_quality']
AllReadsNum += 1
AllBases += len(seq1)
AllBases += len(seq2)
R1_300 = PE300(seq1)
R2_300 = PE300(seq2)
if R1_300 and R2_300:
Useful_ReadsNum +=1
R1_Q30 = Q30(qual1)
R2_Q30 = Q30(qual2)
Read1_Q30_Bases += R1_Q30
Read2_Q30_Bases += R2_Q30
if ( R1_Q30 / len(seq1) >= 0.5 ) and ( R2_Q30 / len(seq2) >= 0.5 ):
Q30_PE_Reads += 1
Useful_Bases += R1_Q30
Useful_Bases += R2_Q30
elif R1_300:
Read1_PE300_ReadsNum += 1
elif R2_300:
Read2_PE300_ReadsNum += 1 Useful_Ratio = Useful_Bases / AllBases
out_handle.write('%i\t%i\t%i\t%i\t%i\t%i\t%i\t%i\t%i\t%f\n'%(AllReadsNum,Read1_PE300_ReadsNum,Read2_PE300_ReadsNum,Useful_ReadsNum,AllBases,Read1_Q30_Bases,Read2_Q30_Bases,Q30_PE_Reads,Useful_Bases,Useful_Ratio))
summary.py
生成脚本:
import os
out = open('summary.sh','w')
cwd = os.getcwd()
with open('templist') as gzfiles:
for gzfile1 in gzfiles:
gzfile2 = gzfiles.next()
out.write('python %s/summary.py %s %s\n'%(cwd,gzfile1.strip(),gzfile2.strip()))
run_summary.py
使用qsub_sge方法,并行投递生成的summary.sh就完成了
Python初体验的更多相关文章
- ipython及Python初体验
阅读目录: Python环境体验 Python编辑器 ipython安装 Python提示符 Python初体验 print和变量 变量操作 内建函数:方法 数学运算:简单算术.随机数 关于模块 一. ...
- python初体验 ——>>> 模拟体育竞技
python初体验 ——>>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...
- Python基础学习参考(一):python初体验
一.前期准备 对于python的学习,首先的有一个硬件电脑,软件python的运行环境.说了一句废话,对于很多初学者而言,安装运行环境配置环境变量的什么的各种头疼,常常在第一步就被卡死了,对于pyth ...
- 可爱的Python_课后习题_CDay−5 Python 初体验和原始需求
计算今年是否是闰年.判断闰年条件,满足年份模400 为0,或者模4 为0 但模100不为0. def is_learp_year(year): """判断年份是否为润年& ...
- 第三节 Hello world --python初体验
祭旗--hello world 据说简单优雅.功能强大是python的魅力所在,这里看到简单了,优雅是什么样的,接下来的学习中慢慢体会吧! print ("Hello world" ...
- Python初体验_基础(一)
一:变量 变量的赋值: name = "Meng" 上述代码声明了一个变量,变量名为name,变量name的值为:"Meng" 变量定义: 一个在内存存数据的容 ...
- Python 初体验
2017的最后一天,在QC的谆谆教诲下,我终于写(背)了九道题,对Python的基本语法有了一个大致了解. 1.A+B+C 就是为了练输入,line=input().split() 录入列表,分割开 ...
- VS Code python初体验笔记
之前一直都是使用Notepad++来编写Python代码,后来想起来之前查资料的时候有个VS Code可以编写一些的脚本语言(js,node.js)甚至是高级编程语言(C#,PHP,JAVA,Pyth ...
- Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】
写在前面的: 作为一个控制专业的女研究生,不知道每天在研究什么,但总归逃脱不了码代码的命运.之前也学习过一些C语言.C++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...
随机推荐
- memcache 启动 储存原理 集群
一. windows下安装启动 首先将memcache的bin目录加入到Path环境变量中,方便后面使用命令: 然后执行 memcached –dinstall 命令安装memcache的服务: 然后 ...
- JWT.NET的使用
JWT是什么 JWT全称是Json Web Token,是一种用于双方之间传递安全信息的简洁的.URL安全的表述性声明规范.JWT作为一个开放的标准( RFC 7519 ),定义了一种简洁的,自包含的 ...
- javascript设计模式——迭代器模式
前面的话 迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示.迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也 ...
- Python的变量及简单数据类型
Python的变量及简单类型 1. 变量 在Python编程中,变量是用来存放值或对像的容器.变量的名称可以自定义,但需遵循一定的规范,否则可能会引发一些错误.Python的变量可以分为数字.字符和 ...
- Opticks依赖库的下载和编译
最近下载Opticks的代码编译,用其自带的retrieve-dependencies.bat下载依赖库,总是提示缺少模块. 分析了一下错误原因,根据命令窗的提示,手动下载如下配置文件: https: ...
- 二叉树的递归遍历 天平UVa839
题意:输入一个树状的天平,利用杠杆原理,根据力矩是否相等(W1D1==W1D2)判断天平是否平衡 解题思路:1.由于判断天平是否平衡,当W1和W2都为0的时候,会先输入左子树,再输入右子树 2.此时的 ...
- Java基础(四)-异常处理机制及其设计
本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...
- CNN中的卷积操作的参数数计算
之前一直以为卷积是二维的操作,而到今天才发现卷积其实是在volume上的卷积.比如输入的数据是channels*height*width(3*10*10),我们定义一个核函数大小为3*3,则输出是8* ...
- 【Web性能进阶】1.无线网络基础
一.无所不在的连接 针对不通的使用场景,无线网络技术有很多种. 鉴于无线网络技术如此多样,笼统地概括所有无线网络的性能优化手段是不可能的.好在大多数无线技术的原理都是相通的,衡量性能的指标和约束条件也 ...
- ERR Unsupported CONFIG parameter: notify-keyspace-events; nested exception is redis.clients.jedis.exceptions.JedisDataException
异常信息 时间:2017-04-05 15:53:57,361 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to hav ...