Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python one-liner (converting perl to pyp)

Tags:

python

pyp

I was wondering if its possible to make a one-liner with pyp that has the same functionality as this.

perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %= 12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }'

This takes in a comma separated list of numbers with 8 numbers per line and outputs it in the same format except the last two numbers in each line are reduced modulo 12. It also outputs the first line (the header line) verbatim first.

I have quite a lot of these obscure perl one-liners and I would like in the first instance to translate them all to python.

like image 817
marshall Avatar asked May 04 '13 20:05

marshall


1 Answers

For the record, I'm not sure I approve. Writing code horizontally doesn't seem to me that much better than writing it vertically, and -- in a friendly way -- I'm a little sceptical this offers as many advantages in practice as it might seem. One of the joys of Python is that you no longer have to worry about writing GolfScript.

That said, how about:

pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"

which produces:

localhost-2:coding $ cat exam.pyp 
a,b,c,d,e,f,g,h
11,22,33,44,55,66,77,88
12,23,34,45,56,67,78,89
13,24,35,46,57,68,79,80
localhost-2:coding $ cat exam.pyp | pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm"
a,b,c,d,e,f,g,h
11,22,33,44,55,66,5,4
12,23,34,45,56,67,6,5
13,24,35,46,57,68,7,8

[Disclaimer: this is my first-ever pyp program, which I downloaded about ten minutes ago.]

like image 59
DSM Avatar answered Nov 01 '22 19:11

DSM