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++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...
随机推荐
- NodeJS爬虫入门
1. 写在前面 往常都是利用 Python/.NET 语言实现爬虫,然现在作为一名前端开发人员,自然需要熟练 NodeJS.下面利用 NodeJS 语言实现一个糗事百科的爬虫.另外,本文使用的部分代码 ...
- Nginx均衡TCP协议服务器案例
Nginx在企业运维中通常用来均衡HTTP协议,例如我们熟知的80.8080.8081等服务.因为大部分的服务都是http请求访问协议,那有时候需要用到TCP协议,如果来实现均衡呢? 默认nginx不 ...
- navigator.userAgent浏览器检测(前端基础系列)
对于前端来说,浏览器检测已经不陌生了,在做一些页面是,需要针对不同的浏览器进行处理不同的逻辑,最简单的就是区分pc和移动端的浏览器,或是android 和ios下的浏览器. 一.浏览器检测的由来? ...
- Codeforces Round #436 (Div. 2)
http://codeforces.com/contest/864 第一次打cf的月赛-- A 题意:给你一个数列,问你能不能保证里面只有两种数且个数相等.2<=n<=100,1<= ...
- DOM操作整理
DOM获取 1. 直接获取 document.getElementById("box_id") 通过ID获取 document.getElementsByName("my ...
- IQKeyboardManager 状态栏(status bar)问题
因为懒,所以具体什么样子,参考下面的链接 具体的问题情况参考:StatusBar background problem #1158 我解决的思路很简单,就是在监听键盘消失的时候,去设置 statys ...
- 使用AOP记录应用调用链开销
最近系统出现了一次线上的性能问题,本来以为目前的QPS应该是不会出现任何问题的,结果微服务还是比较容易因为某个点的问题导致雪崩的...出了性能问题就要做分析,正统的思路是要不断进行压测用JProfil ...
- 一个简单的双向链表(C++实现)
直接上代码,亲测有用. #ifndef __DLINK_H__ #define __DLINK_H__ /* [phead] -> [index0] -> [index1] -> [ ...
- 自学Zabbix3.7-事件Event
配置item.trigger.都是为发送报警做准备的,什么是事件通知呢?简单的说故障发生了,zabbix会发邮件或者短信给你,告诉你服务器的一些状况. 1. 通知条件 发送通知,需要有如下步骤 定义一 ...
- python中的subprocess.Popen()使用
python中的subprocess.Popen()使用 从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回 ...