elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda con python (Barras de progreso).
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con python (Barras de progreso).  (Leído 3,833 veces)
aalleexx

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda con python (Barras de progreso).
« en: 8 Diciembre 2015, 23:35 pm »

Hola, estoy haciendo un script para generar combinaciones de palabras con las letras mknusculas del abecedario y los números, me gustaría ponerle una barra de progreso en la que muestre lo que llevael programa echo Ej: si de las 100 combinaciones que tiene que hacer encuentra 50, que ponga 50%, pero soy incapaz de hacerlo, muchas gracias a todos de antemano.
Aquí va el programita.
Código:
import time
import sys

length=int(raw_input("Numero maximo de caracteres: "))
name=raw_input("Introduce el nombre del fichero con formato (.txt): ")
tic = time.clock()
print ("Ejecutando, espera");
lista=[0 for x in xrange(length)]
x=length-1
string="abcdefghijklnmopqrstuvwxyz1234567890"
list_of_results=[]
file1=file(name,"w")
while(x>-1):
    result=""
    if lista[x]==len(string)-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]=0
        x-=1
    elif x==length-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
    else:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
        if x>0:
            x+=1
        else:
            x=length-1
    file1.write(result+"\n")
toc = time.clock()
ttn = toc - tic
print ("Completado en"+str(ttn)+" segundos.");
print ("Revisa "+str(name)+" en el directorio");


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Ayuda con python (Barras de progreso).
« Respuesta #1 en: 9 Diciembre 2015, 17:25 pm »

1) ¿dónde está el código que intentaste de la barra?
2)hay varias formas de hacerlo ya sea en consola o en modo gráfico
3)en modo consola  sería algo asi: "***********" barra vacía y "######****" barra en progreso
el porcentaje de progreso se obtiene de forma matemática por ej: vacia= 0  total=90 palabras
hechas=?  porcentaje que se lleva es = ? x 100 / total (una simple regla de  3)
4) en modo gráfico depende que módulo uses: TK, GTK,etc


En línea

aalleexx

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con python (Barras de progreso).
« Respuesta #2 en: 9 Diciembre 2015, 17:29 pm »

Hola y gracias por contestar, pero sigo sin entenderlo, el codigo que use, lo puse aparte en un modulo, y no esta ahi, el codigo para la barra de progreso es (modulo.py):
Código:
import sys
import time

class ProgressBar(object):
    def __init__(self, start=0, end=10, width=12, fill='=', blank='.', format='[%(fill)s>%(blank)s] %(progress)s%%', incremental=True):
        super(ProgressBar, self).__init__()

        self.start = start
        self.end = end
        self.width = width
        self.fill = fill
        self.blank = blank
        self.format = format
        self.incremental = incremental
        self.step = 100 / float(width) #fix
        self.reset()

    def __add__(self, increment):
        increment = self._get_progress(increment)
        if 100 > self.progress + increment:
            self.progress += increment
        else:
            self.progress = 100
        return self

    def __str__(self):
        progressed = int(self.progress / self.step) #fix
        fill = progressed * self.fill
        blank = (self.width - progressed) * self.blank
        return self.format % {'fill': fill, 'blank': blank, 'progress': int(self.progress)}

    __repr__ = __str__

    def _get_progress(self, increment):
        return float(increment * 100) / self.end

    def reset(self):
        """Resets the current progress to the start point"""
        self.progress = self._get_progress(self.start)
        return self

class AnimatedProgressBar(ProgressBar):
    """Extends ProgressBar to allow you to use it straighforward on a script.
    Accepts an extra keyword argument named `stdout` (by default use sys.stdout)
    and may be any file-object to which send the progress status.
    """
    def __init__(self, *args, **kwargs):
        super(AnimatedProgressBar, self).__init__(*args, **kwargs)
        self.stdout = kwargs.get('stdout', sys.stdout)

    def show_progress(self):
        if hasattr(self.stdout, 'isatty') and self.stdout.isatty():
            self.stdout.write('\r')
        else:
            self.stdout.write('\n')
        self.stdout.write(str(self))
        self.stdout.flush()

if __name__ == '__main__':
    p = AnimatedProgressBar(end=100, width=80)

    while True:
        p + 5
        p.show_progress()
        time.sleep(0.1)
        if p.progress == 100:
            break
    print #new line

y el codigo que e actualizado para que me coja de ahi la barra es:
Código:
import time
import sys
from modulo import ProgressBar
p = ProgressBar()
car=raw_input("Caracteres a usar: ")
length=int(raw_input("Numero maximo de caracteres: "))
name=raw_input("Introduce el nombre del fichero con formato (.txt): ")
tic = time.clock()
print ("Ejecutando, espera");
lista=[0 for x in xrange(length)]
x=length-1
string=car
list_of_results=[]
file1=file(name,"w")
while(x>-1):
    result=""
    if lista[x]==len(string)-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]=0
        x-=1
    elif x==length-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
    else:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
        if x>0:
            print p+1
            x+=1
        else:
            x=length-1
file1.write(result+"\n")
toc = time.clock()
ttn = toc - tic
print ("Completado en"+str(ttn)+" segundos.");
print ("Revisa "+str(name)+" en el directorio");
es esto lo que me pides? si tucrees conveniente cambiar el codigo del modulo por otro o lo que sea... Pero gracias  :D
« Última modificación: 11 Diciembre 2015, 17:06 pm por aalleexx » En línea

aalleexx

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con python (Barras de progreso).
« Respuesta #3 en: 9 Diciembre 2015, 22:26 pm »

Crees que habría que cambiar el módulo o de modulo?

Hola y gracias por contestar, pero sigo sin entenderlo, el codigo que use, lo puse aparte en un modulo, y no esta ahi, el codigo para la barra de progreso es (modulo.py):
Código:
import sys
import time

class ProgressBar(object):
    def __init__(self, start=0, end=10, width=12, fill='=', blank='.', format='[%(fill)s>%(blank)s] %(progress)s%%', incremental=True):
        super(ProgressBar, self).__init__()

        self.start = start
        self.end = end
        self.width = width
        self.fill = fill
        self.blank = blank
        self.format = format
        self.incremental = incremental
        self.step = 100 / float(width) #fix
        self.reset()

    def __add__(self, increment):
        increment = self._get_progress(increment)
        if 100 > self.progress + increment:
            self.progress += increment
        else:
            self.progress = 100
        return self

    def __str__(self):
        progressed = int(self.progress / self.step) #fix
        fill = progressed * self.fill
        blank = (self.width - progressed) * self.blank
        return self.format % {'fill': fill, 'blank': blank, 'progress': int(self.progress)}

    __repr__ = __str__

    def _get_progress(self, increment):
        return float(increment * 100) / self.end

    def reset(self):
        """Resets the current progress to the start point"""
        self.progress = self._get_progress(self.start)
        return self

class AnimatedProgressBar(ProgressBar):
    """Extends ProgressBar to allow you to use it straighforward on a script.
    Accepts an extra keyword argument named `stdout` (by default use sys.stdout)
    and may be any file-object to which send the progress status.
    """
    def __init__(self, *args, **kwargs):
        super(AnimatedProgressBar, self).__init__(*args, **kwargs)
        self.stdout = kwargs.get('stdout', sys.stdout)

    def show_progress(self):
        if hasattr(self.stdout, 'isatty') and self.stdout.isatty():
            self.stdout.write('\r')
        else:
            self.stdout.write('\n')
        self.stdout.write(str(self))
        self.stdout.flush()

if __name__ == '__main__':
    p = AnimatedProgressBar(end=100, width=80)

    while True:
        p + 5
        p.show_progress()
        time.sleep(0.1)
        if p.progress == 100:
            break
    print #new line

y el codigo que e actualizado para que me coja de ahi la barra es:
Código:
import time
import sys
from modulo import ProgressBar
p = ProgressBar()
car=raw_input("Caracteres a usar: ")
length=int(raw_input("Numero maximo de caracteres: "))
name=raw_input("Introduce el nombre del fichero con formato (.txt): ")
tic = time.clock()
print ("Ejecutando, espera");
lista=[0 for x in xrange(length)]
x=length-1
string=car
list_of_results=[]
file1=file(name,"w")
while(x>-1):
    result=""
    if lista[x]==len(string)-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]=0
        x-=1
    elif x==length-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
    else:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
        if x>0:
            print p+1
            x+=1
        else:
            x=length-1
file1.write(result+"\n")
toc = time.clock()
ttn = toc - tic
print ("Completado en"+str(ttn)+" segundos.");
print ("Revisa "+str(name)+" en el directorio");
es esto lo que me pides? si tucrees conveniente cambiar el codigo del modulo por otro o lo que sea... Pero gracias  :D
En línea

aalleexx

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con python (Barras de progreso).
« Respuesta #4 en: 10 Diciembre 2015, 13:59 pm »

1) ¿dónde está el código que intentaste de la barra?
2)hay varias formas de hacerlo ya sea en consola o en modo gráfico
3)en modo consola  sería algo asi: "***********" barra vacía y "######****" barra en progreso
el porcentaje de progreso se obtiene de forma matemática por ej: vacia= 0  total=90 palabras
hechas=?  porcentaje que se lleva es = ? x 100 / total (una simple regla de  3)
4) en modo gráfico depende que módulo uses: TK, GTK,etc


El módulo que estoy usando es Pyprind,
Y el codigo al que le quiero añadir la barra es:
Código:
#v2.0

#imports
import time

#Variables de input
car=raw_input("Caracteres a usar: ")
length=int(raw_input("\nMaximo numero de caracteres: "))
name=raw_input("\nExtension y nombre de archivo: ")

#Ejecutando
tic = time.clock()
print ("Ejecutando, espera");
lista=[0 for x in xrange(length)]
x=length-1
string=car
list_of_results=[]
file1=file(name,"w")
while(x>-1):
    result=""
    if lista[x]==len(string)-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]=0
        x-=1
    elif x==length-1:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
    else:
        for z in xrange(length):
            result+=string[lista[z]]
        lista[x]+=1
        if x>0:
            x+=1
        else:
            x=length-1
#Escribiendo en el fichero
    print result
    file1.write(result+"\n")
toc = time.clock()
ttn = toc - tic
print ("Finalizado en "+str(ttn)+" segundos.");
print ("Revisa "+str(name)+" en tu directorio.");
#v2.0
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Ayuda con python (Barras de progreso).
« Respuesta #5 en: 10 Diciembre 2015, 16:01 pm »

¿has visto que el script tiene mezclado python 2.x y 3.x? ¿cómo lo ejecutás?
 tenés las funciones de la barra en un módulo de clase, pues crea una instancia y después llamas a los  atributos o funciones que necesitas.
En línea

aalleexx

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con python (Barras de progreso).
« Respuesta #6 en: 10 Diciembre 2015, 16:07 pm »

Pero como lo harías tu? Sigue sin salirme, lo ejecuto con 2.7 y me funciona todo
« Última modificación: 10 Diciembre 2015, 16:15 pm por aalleexx » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda! Ordenador peta con barras negras y grises en monitor
Hardware
Jnex 2 2,248 Último mensaje 5 Noviembre 2012, 18:17 pm
por Jnex
Barras de progreso en KDE
GNU/Linux
genomma 2 2,634 Último mensaje 25 Marzo 2013, 19:15 pm
por genomma
[AYUDA][PYTHON] como se usa la libreria WAVE en python?
Scripting
Noxware 2 3,374 Último mensaje 5 Mayo 2014, 09:03 am
por Intrus0
[AYUDA][PYTHON] Necesito ayuda con el metodo SEARCH del modulo RE de python
Scripting
Noxware 2 3,678 Último mensaje 24 Mayo 2014, 16:11 pm
por Noxware
[AYUDA][PYTHON] Leer y guardar archivos .exe de forma hexadecimal en python???
Scripting
Noxware 3 5,359 Último mensaje 22 Agosto 2014, 09:33 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines