/usr/lib/python2.7/dist-packages/pbsuite/utils/fastqSplit.py is in python-pbsuite-utils 15.8.24+dfsg-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #!/usr/bin/python
import sys
from optparse import OptionParser
from collections import namedtuple
from FileHandlers import wrap, qwrap, FastqFile
from StringIO import StringIO
USAGE = """Usage: %prog <input.fastq> <baseName>
Splits a fastq into <baseName>.fasta and <baseName>.qual
Assumes Sanger Encoded Phred Scores in fastq
"""
def __parseArgs():
parser = OptionParser(usage=USAGE)
opts, args = parser.parse_args(sys.argv)
if len(args) != 3: parser.error('Expected 2 arguments')
return args[1:]
def fastqIter( fn ):
fh = open(fn, 'r')
FastQEntry = namedtuple("FastQEntry", "name seq qual")
while True:
name = fh.readline().strip()[1:]
if name == "": break
#seq grab
line = fh.readline().strip()
seq = StringIO()
while not line.startswith('+'):#Assuming no name...
seq.write(line)
line = fh.readline().strip()
seq = seq.getvalue()
seqLen = len(seq)
qual = ""
curLen = 0
while curLen != len(seq):
line = fh.readline().strip()
if line == "":
sys.stderr.write("Bad Fastq File: Last attempted entry = %s\n" % (name))
exit(10)
curLen += len(line)
qual += line
yield FastQEntry(name, seq, qual)
def phredToQual( qual ):
"""
Take a qual string that is phred/sanger encoded
turn it into a list of quals
"""
return map(lambda x: ord(x)-33, list(qual))
if __name__ == '__main__':
fastq, baseName = __parseArgs()
fout = open(baseName+".fasta", 'w')
qout = open(baseName+".qual", 'w')
fastq = FastqFile(fastq)
for name in fastq:
entry = fastq[name]
fout.write(">%s\n%s\n" % (entry.name, wrap(entry.seq)))
qout.write(">%s\n%s\n" % (entry.name, qwrap(phredToQual(entry.qual))))
fout.close()
qout.close()
|