changeset 4:2080e2a4f209 draft

planemo upload commit ef71f7a32bb76c79052b535be1d0beceff6e03a5-dirty
author proteore
date Tue, 05 Feb 2019 08:22:47 -0500
parents 68cee865018e
children 33ca9ba2495a
files filter_kw_val.py filter_kw_val.xml
diffstat 2 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/filter_kw_val.py	Wed Jan 16 08:30:53 2019 -0500
+++ b/filter_kw_val.py	Tue Feb 05 08:22:47 2019 -0500
@@ -43,13 +43,18 @@
 def is_number(number_format, n):
     float_format = re.compile(r"^[-]?[0-9][0-9]*.?[0-9]+$")
     int_format = re.compile(r"^[-]?[0-9][0-9]*$")
+    scientific_number = re.compile(r"^[-+]?[\d]+\.?[\d]*[Ee](?:[-+]?[\d]+)?$")
     test = ""
     if number_format == "int":
         test = re.match(int_format, n)
     elif number_format == "float":
         test = re.match(float_format, n)
+        if test is None : test = re.match(scientific_number,n)
+
     if test:
         return True
+    else :
+        return False
 
 #Filter the document
 def filters(args):
@@ -75,7 +80,7 @@
         for v in args.value:
             v[0] = v[0].replace(",",".")
             if is_number("float", v[0]):
-                csv_file = comma_number_to_float(csv_file,v[1],header)
+                csv_file = comma_number_to_float(csv_file,column_from_txt(v[1]),header)
                 results_dict = filter_value(csv_file, header, results_dict, v[0], v[1], v[2])
             else:
                 raise ValueError("Please enter a number in filter by value")
@@ -83,7 +88,7 @@
     if args.values_range:
         for vr in args.values_range:
             vr[:2] = [value.replace(",",".") for value in vr[:2]]
-            csv_file = comma_number_to_float(csv_file,vr[2],header)
+            csv_file = comma_number_to_float(csv_file,column_from_txt(vr[2]),header)
             if (is_number("float", vr[0]) or is_number("int", vr[0])) and (is_number("float",vr[1]) or is_number("int",vr[1])):
                 results_dict = filter_values_range(csv_file, header, results_dict, vr[0], vr[1], vr[2], vr[3])
 
@@ -143,6 +148,7 @@
         tab= [line for i,line in enumerate(tab) if i not in unsortable_lines]
 
         if only_number(tab,sort_col) and any_float(tab,sort_col)  : 
+            tab = comma_number_to_float(tab,sort_col,False)
             tab = sorted(tab, key=lambda row: float(row[sort_col]), reverse=reverse)
         elif only_number(tab,sort_col):
             tab = sorted(tab, key=lambda row: int(row[sort_col]), reverse=reverse)      
@@ -167,7 +173,6 @@
 
 #turn into float a column
 def comma_number_to_float(csv_file,ncol,header) :
-    ncol = int(ncol.replace("c","")) - 1
     if header : 
         tmp=[csv_file[0]]
         csv_file=csv_file[1:]
@@ -190,7 +195,6 @@
     return False
 
 def only_number(tab,col) :
-
     for line in tab :
         if not (is_number("float",line[col].replace(",",".")) or is_number("int",line[col].replace(",","."))) :
             return False
--- a/filter_kw_val.xml	Wed Jan 16 08:30:53 2019 -0500
+++ b/filter_kw_val.xml	Tue Feb 05 08:22:47 2019 -0500
@@ -1,4 +1,4 @@
-<tool id="MQoutputfilter" name="Filter by keywords and/or numerical value" version="2019.01.16">
+<tool id="MQoutputfilter" name="Filter by keywords and/or numerical value" version="2019.02.05">
     <description></description>
     <requirements>
     </requirements>