Files
galaxy/tools/filters/trimmer.py
T

92 lines
2.7 KiB
Python

#!/usr/bin/env python
from __future__ import print_function
import optparse
import sys
def stop_err(msg):
sys.exit(msg)
def main():
usage = """%prog [options]
options (listed below) default to 'None' if omitted
"""
parser = optparse.OptionParser(usage=usage)
parser.add_option(
"-a",
"--ascii",
action="store_true",
default=False,
help="Use ascii codes to defined ignored beginnings instead of raw characters",
)
parser.add_option(
"-q",
"--fastq",
action="store_true",
default=False,
help="The input data in fastq format. It selected the script skips every even line since they contain sequence ids",
)
parser.add_option(
"-i",
"--ignore",
help='A comma separated list on ignored beginnings (e.g., ">,@"), or its ascii codes (e.g., "60,42") if option -a is enabled',
)
parser.add_option("-s", "--start", type="int", default=0, help="Trim from beginning to here (1-based)")
parser.add_option("-e", "--end", type="int", default="0", help="Trim from here to the ned (1-based)")
parser.add_option(
"-f", "--file", dest="input_txt", default=False, help="Name of file to be chopped. STDIN is default"
)
parser.add_option(
"-c", "--column", type="int", dest="col", default="0", help="Column to chop. If 0 = chop the whole line"
)
options, args = parser.parse_args()
invalid_starts = []
if options.input_txt:
infile = open(options.input_txt)
else:
infile = sys.stdin
if options.ignore and options.ignore != "None":
invalid_starts = {chr(int(c)) if options.ascii else c for c in options.ignore.split(",")}
for i, line in enumerate(infile):
line = line.rstrip("\r\n")
if line:
if options.fastq and i % 2 == 0:
print(line)
continue
if line[0] not in invalid_starts:
if options.col == 0:
if options.end == 0:
line = line[options.start - 1 :]
else:
line = line[options.start - 1 : options.end]
else:
fields = line.split("\t")
if options.col > len(fields):
stop_err("Column %d does not exist. Check input parameters\n" % options.col)
if options.end == 0:
fields[options.col - 1] = fields[options.col - 1][options.start - 1 :]
else:
fields[options.col - 1] = fields[options.col - 1][options.start - 1 : options.end]
line = "\t".join(fields)
print(line)
if __name__ == "__main__":
main()