[Programación]Traducir código perl a python

Fabian Ezequiel Gallina galli.87 en gmail.com
Lun Dic 7 16:53:53 ARST 2009


El día 7 de diciembre de 2009 15:27, Horacio Castellini
<horacio9573 en yahoo.com.ar> escribió:
> Holas, tengo un script hecho en perl cuya parte del código que quiero traducir es: (como soy demasiado nuevo en este lenguaje... )
>
> ------------------------------------------
>
> #!/usr/bin/perl
> use Math::Trig;
> eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
>    if $running_under_some_shell;
>                        # this emulates #! processing on NIH machines.
>                        # (remove #! line above if indigestible)
>
> eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
>                        # process any FOO=bar switches
>
> $, = ' ';               # set output field separator
> $\ = "\n";              # set output record separator
>
> $maximo = 230;
> $NR=0;
> $NN=3;
> #----- Por cada frecuencia se modifica estas dos líneas..
> # escala==escala de tiempo para generar la serie de tiempos...
> print "Archivo ".$ARGV[0]."\n";#Archivo que abre en lugar de STDIO!!
> $frec=1;
> $escala=0.03;
> # Si no se dice nada usa por defecto (1,0.03)
> # como argumento de entrada... OJO!
> if($ARGV[0]=~/101/) {
>        $frec=1;
>        $escala=0.03;
> }
> if($ARGV[0]=~/201/) {
>        $frec=2;
>        $escala=0.015;
> }
> if($ARGV[0]=~/301/) {
>        $frec=3;
>        $escala=0.015;
> }
> if($ARGV[0]=~/401/) {
>        $frec=4;
>        $escala=0.0075;
> }
> if($ARGV[0]=~/501/) {
>        $frec=5;
>        $escala=0.0075;
> }
> if($ARGV[0]=~/601/) {
>        $frec=6;
>        $escala=0.0045;
> }
> if($ARGV[0]=~/701/) {
>        $frec=7;
>        $escala=0.0045;
> }
> #--------------
> $pi=pi;
> # print $pi."\n";
> $w=2.0*$pi*$frec/2.0;
> # print $w." ".$pi."\n";
> while (<>) {
>    s/\"//g;
>    s/\,//g;
>    ($Fld1,$Fld2) = split(' ', $_, 9999);
>    $Y[$NR] = $Fld2;
>    $X[$NR] = $Fld1;
>    $X[$NR]*=$escala;
>    $NR++;
> }
> $NR--;
>
> ...................
> ..............
>
> la forma en que es llamado es por medio de un script bash, cuyo código es:
>
> ---------------------------
>
> #!/bin/sh
> if test -z"$1"
> then
>       echo "Faltan argumentos"
> exit 1
> fi
> A="1 2 3 4 5 6 7"
> for i in $A
> do
> # Debe conocer el código de frecuencia.
> echo "Codigo $i"
> if [ -f $1.$i'01' ]
> then
>    perl ajustar.pl $1.$i'01'
> else
>    echo "$1.$i01 no existe..."
> fi
> done
>
> que si se puede sería interesante que lo haga todo el mismo código python ya que este se va a ejecutar en una máquina con python en Win$$$...
>
> Sugerencias bienvenidas...
>
> Saludos...
>
>

Hola Horacio, ahora estoy medio a las corridas sino te dejaría el
script traducido.

La buena noticia es que podés hacer todo en el mismísimo script de python.

Para parsear argumentos te recomiendo que le pegues una mirada a
optparse[0] de la estandar lib, es muy MUY fácil de usar y podrías
despegarte de ese fragmento bash en unas pocas líneas.

El resto del programa perl debería ser trivial pasarlo. Cualquier duda
que te surja avisá.


[0] http://docs.python.org/library/optparse.html


Saludos,
-- 
Fabián E. Gallina
http://www.from-the-cloud.com


Más información sobre la lista de distribución Programacion