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++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...
随机推荐
- 一个js的动画,以前以为只有flash可以实现
11年刚干这行的时候,看到这种什么百叶窗的动画,以为都是flash实现的,最近突然灵光一闪,想到了用js实现(虽然我不是做前端的,本人做.net).代码虽然实现了,但是比较乱,先上个图: 代码主要就是 ...
- kubernetes入门实践
k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...
- mysql主从备份及常见问题处理
1.mysql主从备份基本原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新 ...
- java与数据库
工具:mysql: java eclipse,phpstudy. 以MySQL为例 java连接MySQL可能你在度娘的帮助下,又设置环境变量又改这改那的,结果还是没有连接成功. 今天我来分享一下不需 ...
- git的merge功能
merge功能是将一些分支的内容合并到某一个特定的分支,这里我为了测试下,在阿里云code上面新建了一个项目 现在我需要将dev分支merge到主分支master 开发者和管理员都有权发起merge请 ...
- DotNetCore跨平台~Moq框架实现模拟测试
回到目录 当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是 ...
- 【ANT】运行JMeter用例的build.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...
- sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系
CREATE PROCEDURE [dbo].[GetGroupInfo] @s_code NVARCHAR() = --会员卡号 AS BEGIN declare @p int; --查询唯一性结果 ...
- iOS NSString 文本不同的颜色 标题+文本字体大小 行间距/删除不需要的字符 /以及自适应高度
#import <Foundation/Foundation.h> @interface TextsForRow : NSObject @property(nonatomic,copy)N ...
- 如何在markdown中插入表情
Markdown是很好用的呀,个人灰常的喜欢,也是灰常漂亮的,但是如何在写文章的时候插入表情呢,下面给出一部分代码