Tuesday, August 8, 2017

Python CSV to Excel (xlsx) Thanks to pyexcel

import pyexcel
import glob
import sys
import re
import os

# $ python script.py arg1 [arg2]
# # arg2 optional, arg1 not. arg1 a path to dir or *.csv or specific.csv
# arg2 can be -merged or specfic.xlsx
# if multiple infiles are seen, then if no arg2, each file will result in unique .xlsx

if ( os.path.isdir( sys.argv[1] ) ) :
    infiles = glob.glob( sys.argv[1] + '/*.csv' )
elif ( re.search( '.csv' , sys.argv[1] ) ) :
    infiles = glob.glob( sys.argv[1] )
else :
    sys.exit()

if ( len( sys.argv) > 2 ) :
    if ( re.search( '-merged' , sys.argv[2] ) ) :
        pyexcel.merge_csv_to_a_book( infiles , 'merged.xlsx' )
    elif( re.search( '.xlsx' , sys.argv[2] ) ) :
        pyexcel.merge_csv_to_a_book( infiles ,  sys.argv[2] )
else :
    for file in infiles :
        pyexcel.merge_csv_to_a_book( [file] , file.replace( '.csv' , '.xlsx' ) )

Wednesday, May 17, 2017

A Handy Debugging Tip If You're Using Python

You want to run until a certain condition is satisfied - because, once you get to an advanced level and you're analyzing the 'class' rule, you're up against subtle fails..

python -m pdb SynAnal Square/SquareTokens.xml

> break 115 , rule == 'paramList'

> c

Now, you get straight to the action. Nice?

Check out some Python performance tips here : https://wiki.python.org/moin/PythonSpeed

Tuesday, May 9, 2017

Jack Grammar - Only Rules Support * and ? - Not Primitives

After coding, I had to use Excel to see this - rather than comb through my text. The power of visualization..

Part of it is doing a rule using a formula : (in the box, type)

=AND( ISNUMBER(B2), B2 > 1 )

class
1
1
1
3
3
1
class
 keyword
 identifier
 symbol
 rule
 rule
 symbol
classVarDec
1
1
1
3
1
classVarDec
 keyword
 rule
 identifier
 rule
 symbol
addlVarDec
1
1
addlVarDec
 symbol
 identifier
type
1
type
 keyword||identifier
subroutineDec
1
1
1
1
1
1
1
subroutineDec
 keyword
 keyword||rule
 identifier
 symbol
 rule
 symbol
 rule
parameterList
2
parameterList
 rule
params
1
3
params
 rule
 rule
param
1
1
param
 rule
 identifier
addlParam
1
1
addlParam
 symbol
 identifier
subroutineBody
1
3
1
1
subroutineBody
 symbol
 rule
 rule
 symbol
varDec
1
1
1
3
1
varDec
 keyword
 rule
 identifier
 rule
 symbol
statements
3
statements
 rule
statement
1
statement
 rule
letStatement
1
1
2
1
1
1
letStatement
 keyword
 identifier
 rule
 symbol
 rule
 symbol
index
1
1
1
index
 symbol
 rule
 symbol
ifStatement
1
1
1
1
1
1
1
2
ifStatement
 keyword
 symbol
 rule
 symbol
 symbol
 rule
 symbol
 rule
elseBlock
1
1
1
1
elseBlock
 keyword
 symbol
 rule
 symbol
whileStatement
1
 expression
 )
1
1
1
whileStatement
 keyword
 symbol
 rule
 symbol
 symbol
 rule
 symbol
doStatement
1
1
1
doStatement
 keyword
 rule
 symbol
returnStatement
1
2
1
returnStatement
 keyword
 rule
 symbol
expression
1
3
expression
 rule
 rule
subExp
1
1
subExp
 symbol
 rule
term
1
term
 rule
constant
1
constant
 integerConstant||stringConstant
arrayElem
1
1
1
1
arrayElem
 rule
 symbol
 rule
 symbol
paranthExp
1
1
paranthExp
 symbol
 rule
 symbol
unOpTerm
1
1
unOpTerm
 symbol
 rule
subroutineCall
1
subroutineCall
 rule
simpleCall
1
1
1
1
simpleCall
 identifier
 symbol
 rule
 symbol
classMethCall
1
1
1
1
1
1
classMethCall
 identifier
 symbol
 identifier
 symbol
 rule
 symbol
expressionList
2
expressionList
 rule
expressions
1
3
expressions
 rule
 rule
addlExpr
1
1
addlExpr
 symbol
 rule
keywordConstant
 true|false|null|this
keywordConstant
 keyword