python 此代码将从执行它的文件夹中的所有fastq的前1000行中提取标题信息。然后它需要

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 此代码将从执行它的文件夹中的所有fastq的前1000行中提取标题信息。然后它需要相关的知识,希望对你有一定的参考价值。

#!/usr/bin/python
import re
from itertools import groupby as g
import subprocess
import sys
from collections import OrderedDict

def most_common(L):
  return max(g(sorted(L)), key=lambda(x, v):(len(list(v)),-L.index(x)))[0]

# Set this variable to ensure no quality score lines get examined.
fq_at_start = "HWI"

r = subprocess.check_output("""
for r in `ls *fastq.gz`; 
do
echo "$r" 
gunzip -cq $r | head -n 1000 | grep '^@%s' - | grep -v '^@@' |  egrep '(:.+){4}' -
echo "|" 
done;
""" % fq_at_start, shell=True)


f = open("fastq_summary.txt", "w")
 

orig_line =  OrderedDict([("file", ""),
			("instrument", ""),
			("flowcell_id", ""),
			("flowcell_lane", ""),
			("x_coord", ""),
			("y_coord", ""),
			("index", ""),
			("pair", ""),
			("run_id", ""),
			("filtered",""),
			("control_bits","")])
l_keys = orig_line.keys()

f.write('\t'.join(l_keys) + "\n")
 
for fq_group in [filter(len,x.split('\n')) for x in r.split("|")][:-1]:
	index_set = []
	for heading in fq_group[1:]:
		l = re.split(r'(\:|#| )',heading)
		line = orig_line
		line["file"] = fq_group[0]
                if l[0].startswith("@SRR"):
                    line["run_id"] = l[0]
                    line["instrument"] = l[2]
                    line["flowcell_lane"] = l[4]
                    index_set.append("")
		elif len(l) == 11:
			line["instrument"] = l[0]
			line["flowcell_lane"] = l[2]
			line["flowcell_tile"] = l[4]
			line["x_coord"] = l[6]
			line["y_coord"] = l[8]
			try:
				line["pair"] = l[10].split("/")[1]
				index_set.append(l[10].split("/")[0])
			except:
				break
		elif len(l) == 21:
			line["instrument"] = l[0]
			line["run_id"] = l[2]
			line["flowcell_id"] = l[4]
			line["flowcell_lane"] = l[6]
			line["flowcell_tile"] = l[8]
			line["x_coord"] = l[10]
			line["y_coord"] = l[12]
			line["pair"] = l[14]
			line["filtered"] = l[16]
			line["control_bits"] = l[16]
			line["index"] = l[20]
			index_set.append(l[20])
		else:
			print "error", l
	line["index"] = most_common(index_set)
	f.write('\t'.join([line[x] for x in l_keys]+ ["\n"]))

以上是关于python 此代码将从执行它的文件夹中的所有fastq的前1000行中提取标题信息。然后它需要的主要内容,如果未能解决你的问题,请参考以下文章

特殊权限

python重命名多个文件

在python中将所有零移动到数组的末尾

python 任何Borg子类的所有实例都将从cmd2源代码L#1456共享状态

批量FTP用于管理域中的文件

查找将从 Windows 中的命令行执行的程序的路径